如果我有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