如果我有x
初始化为为什么我需要使用mapcar中的符号值来分配一个值?
(setf x 0)
然后我就可以直接做
(setf x 1)
因此,在使用mapcar
时更改值,为什么我必须使用symbol-value
分配给这个符号?
(mapcar #'(lambda (a b)
(setf (symbol-value a) b))
'(x)
'(1))
它与报价有关吗?
如果我有x
初始化为为什么我需要使用mapcar中的符号值来分配一个值?
(setf x 0)
然后我就可以直接做
(setf x 1)
因此,在使用mapcar
时更改值,为什么我必须使用symbol-value
分配给这个符号?
(mapcar #'(lambda (a b)
(setf (symbol-value a) b))
'(x)
'(1))
它与报价有关吗?
首先,不要使用setf进行初始化,通过defvar
或defparameter
定义变量。其次,你从''(x)中获得符号'X',而不是一个地方,与setf
一起使用,所以你需要通过符号值得到位置,然后用setf宏设置它。
谢谢!这就说得通了。 – currentoor 2014-09-30 04:27:15
@Toor_Sultan请注意,这只适用于特殊变量(通常用def {var,parameter}定义)。你将不能做'(let((x 0))(mapcar ...'(x)'(1)))'来设置由'let'建立的变量的值。 – 2014-09-30 11:50:34
'(Setf x 0)''不会初始化'x'。它只是设置它,大多数实现会隐式初始化它,但会给出警告。不要这样做。使用'let'来建立本地绑定。 – Svante 2014-09-30 08:17:07
这可以写成'(mapcar'set'(x)'(1))' – Xach 2014-09-30 12:17:35