動的変数を使用しています。そのうちの 1 つを値 10 で呼び出しましょう*x*。
変数の名前をパラメーターとして渡すことにより、関数呼び出しを介してその値を変更したい:
(defun change-value (varname)
(setf varname 20))
その後、呼び出し(change-value *x*)ます。私の理解が正しければ、varnameはローカル スコープを使用するため、setfは外部では効果がありませんchange-value。したがって、*x*その後は 10 のままです。
私の質問は、*x*上記のような関数呼び出しで 20 に等しくする方法はありますか? 追加(proclaim '(special varname))し(declare (special varname))てみましたが、何もしないようです。
ああ、マクロを定義することは、多かれ少なかれ私が望むことを行いますが、これが良い習慣であるとは思えません:
(defmacro change-value-macro (varname)
`(setf ,varname 20))
(change-value-macro *x*)