Я использую динамические переменные, давайте назовем один из них *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 переключающий стоимость из-х (значение) (SEtF * х * значение))'? Или просто '(setf * x * value)' непосредственно? –