2014-09-30 49 views
0

如果我有x初始化为为什么我需要使用mapcar中的符号值来分配一个值?

(setf x 0) 

然后我就可以直接做

(setf x 1) 

因此,在使用mapcar时更改值,为什么我必须使用symbol-value分配给这个符号?

(mapcar #'(lambda (a b) 
      (setf (symbol-value a) b)) 
     '(x) 
     '(1)) 

它与报价有关吗?

+1

'(Setf x 0)''不会初始化'x'。它只是设置它,大多数实现会隐式初始化它,但会给出警告。不要这样做。使用'let'来建立本地绑定。 – Svante 2014-09-30 08:17:07

+1

这可以写成'(mapcar'set'(x)'(1))' – Xach 2014-09-30 12:17:35

回答

1

首先,不要使用setf进行初始化,通过defvardefparameter定义变量。其次,你从''(x)中获得符号'X',而不是一个地方,与setf一起使用,所以你需要通过符号值得到位置,然后用setf宏设置它。

+0

谢谢!这就说得通了。 – currentoor 2014-09-30 04:27:15

+1

@Toor_Sultan请注意,这只适用于特殊变量(通常用def {var,parameter}定义)。你将不能做'(let((x 0))(mapcar ...'(x)'(1)))'来设置由'let'建立的变量的值。 – 2014-09-30 11:50:34

相关问题