2

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

2 に答える 2