2017-02-17 43 views
1

例如:如何將存儲在變量中的值添加到列表中?

(setf s 2) 
    s => 2 

(setf list1 '(1 s 3 4)) 
    list1 => (1 s 3 4) 

我如何得到它添加存儲在s到列表中的價值? 對於這個例子,我想用s來生成一個列表(1 2 3 4) 我有一本lisp書我正在閱讀,我似乎無法找到任何提及如何做到這一點,所以我想我' d問。 感謝

方案
+1

'(1,s 3 4)應該工作(注意s前面的逗號)。 –

+0

我剛剛嘗試過,並且出現以下錯誤(逗號在反引用之外是非法的) –

+1

是的,您應該使用反引號('),而不是引號(')。 –

回答

1

所以引用數據就像是字符串常量。如果我用Java寫的"1 s 3 4"我將無法得到s與變量內容取代。我必須寫"1 " + s + " 3 4"。在Lisp我們backquote爲此在列表結構:

`(1 ,s 3 4) 
; ==> (1 2 3 4) 

注意,這是一招..這就像「1 $ S 3 4」在PHP因爲它代表的是創建與加引號的變量列表代碼評估並返回一個新的列表結構。引擎蓋下它非常類似於寫作:

(list 1 s 3 4) 
; ==> (1 2 3 4) 

當然list不是原始,因爲它只是使用cons。它的作用是這樣的:

(cons 1 (cons s (cons 3 (cons 4 '())))) 
; ==> (1 2 3 4) 
+0

感謝您的解釋。現在很好用! –

1

我會想使用s來生成一個列表(1 2 3 4)

功能list都能得心應手:

CL-USER 14 > (let ((s '2)) 
       (list 1 s 3 4)) 
(1 2 3 4) 

函數LIST從其參數中創建一個新的新列表。

相關問題