2016-08-18 82 views
0

我願做這樣的事情在GCL LISP:Lisp語言 - setq和汽車

(setq (car '(a 1)) (cdr '(a 1))) 

得到的結果是:

(setq a 1) 

是這樣的,或像這可能嗎? 問候,Declan

+0

是'a'變量的名稱(詞法或特殊)已經定義?或者它是不確定的? – Renzo

+0

你爲什麼要這樣做?爲什麼不使用哈希表呢? – uselpa

+0

除了所有其他問題,它是你想要的'cadr',而不是'cdr'。 –

回答

0

是的,這是可能的。 Common Lisp擁有整個生態系統,您可以在程序運行期間編譯並執行各種操作。

(setq test value)最初只是一個變成(set 'test value)的宏。 set已經被棄用,但我懷疑它會永遠被刪除。現在

(set 'test 'a) 
(set test 10) 
a ; ==> 10 

setq確保你不要忘了一點,因爲報價你命名你想要的變量的時間99.99%,你不需要調試半天尋找失蹤報價。

+1

請注意,'set'只適用於特殊變量。例如(在環境中沒有任何聲明)'(let((x 1))(set'x 2)x)'求值爲'1',但將'x'的'符號值'設置爲'2'。 – tfb