如何将存储在变量中的值添加到列表中?

时间:2017-02-17 09:04:06

标签: lisp

例如:

(setf s 2)
    s => 2

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

如何将s中存储的值添加到列表中? 对于这个例子,我想用s来生成一个列表(1 2 3 4) 我有一本lisp书,我正在阅读,我似乎无法提及如何做到这一点,所以我想我会问。 感谢

2 个答案:

答案 0 :(得分:1)

所以Scheme中引用的数据就像字符串常量。如果我用Java编写"1 s 3 4",我将无法用变量内容替换s。我必须写"1 " + s + " 3 4"。在Lisp中,我们backquote在列表结构中执行此操作:

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

请注意,这是一个技巧..它就像PHP中的“1 $ s 3 4”,因为它代表了创建列表的代码,其中评估了未引用的变量并返回一个新的列表结构。在引擎盖下它与写作非常相似:

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

当然list不是原始的,因为它只使用cons。它的作用是:

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

答案 1 :(得分:1)

  

我想用s来生成一个列表(1 2 3 4)

函数list可以很方便:

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

函数LIST从其参数创建一个全新的列表。