動的変数を使用しています。そのうちの 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*)