我使用動態變量時許,我們姑且稱之爲*x*
的一個具有10如何通過函數調用有效地在動態變量上使用setf?
我想通過一個函數調用來改變其值的值通過傳遞變量名作爲參數:
(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*)
'(defun定義變化值的-X(值)(SETF * X *值))'?或者直接'(setf * x * value)'? –