2014-09-30 52 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

相關問題