2017-02-17 143 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从其参数中创建一个新的新列表。

相关问题