Lisp 将一个列表扩展到父sexp中

Lisp 将一个列表扩展到父sexp中,lisp,scheme,common-lisp,Lisp,Scheme,Common Lisp,在任何lisp中是否有一个表单可以在父sexp中“传播”列表?比如: (+ (spread '(1 2 3))) -> (+ 1 2 3) 有两种方法可以做到这一点。哪一个更好取决于你最终想要什么 通常,您可以在`(反引号)中使用,@。对,@下面的表单进行求值以生成一个列表,然后将其拼接到模板中: * `(+ ,@'(1 2 3)) (+ 1 2 3) * (eval `(+ ,@'(1 2 3))) 6 或者,如果您只想使用压缩在列表中的参数调用函数,则使用apply函数会更方便:

在任何lisp中是否有一个表单可以在父sexp中“传播”列表?比如:

(+ (spread '(1 2 3))) -> (+ 1 2 3)

有两种方法可以做到这一点。哪一个更好取决于你最终想要什么

通常,您可以在
`
(反引号)中使用
,@
。对
,@
下面的表单进行求值以生成一个列表,然后将其拼接到模板中:

* `(+ ,@'(1 2 3))
(+ 1 2 3)

* (eval `(+ ,@'(1 2 3)))
6
或者,如果您只想使用压缩在列表中的参数调用函数,则使用
apply
函数会更方便:

* (apply #'+ '(1 2 3))
6

哦我一直在源文件和示例中看到
,@
,但我从来没有弄清楚它的作用(直到现在)。非常感谢。是的,如果你只是想把它传递给像
+
这样的函数,那么这个答案的
应用部分很可能就是你想要的。非常好!我支持应用方法,因为它是一个阴谋家