我正在使用动态变量,让我们调用其中*x*
一个值为 10。
我想通过将变量的名称作为参数传递来通过函数调用来更改其值:
(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*)