mutator elisp 関数を定義するにはどうすればよいですか? つまり、関数外で使用するために関数内で変更できる elisp 関数にパラメーターを送信するにはどうすればよいですか (C++ の非 const 参照変数またはポインターに似ています)。たとえば、次のように定義された関数 foo があるとします。
(defun foo (a b c d)
;do some stuff to b, c, and d
.
.
.
)
私はそれを次のように呼びたいと思うかもしれません
(defun bar (x)
(let ((a) (b) (c) (y))
.
.
.
;a, b and c are nil at this point
(foo x a b c)
(setq y (some-other-function-of a b c x and-other-variables))
.
.
.
)) ... )
y)
ある関数にローカルなすべてのパラメーターを 1 つの大きな古いリストに入れ、関数の最後でリストを評価し、その関数の戻り値 (リストの)、つまり
(setq return-list (foo read-only-x read-only-y))
(setq v_1 (car return-list))
(setq v_2 (cadr return-list))
.
.
しかし、より良い方法はありますか?これを解決するためにこれまでに達成したことは、変数が渡された方法と変わらない変数で関数を終了することだけです
なぜこれをやりたいのかというと、私は単純に、いくつかの名前付け可能な概念 c に関連する式のすべてのコレクションが独自の小さなモジュール c_1、c_2、c_3、... c_n に存在するように、いくつかの大きな関数 F をリファクタリングしようとしています。途中で更新する必要がある引数を指定して、F 内から呼び出すことができます。つまり、F は次のようになります。
(defun F ( ... )
(let ((a_1) (a_2) ... )
(c_1 a_1 ... a_m)
(c_2 a_h ... a_i)
.
.
.
(c_n a_j ... a_k)
.
.
.
))...))