Lisp 将一个列表扩展到父sexp中
在任何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函数会更方便:
(+ (spread '(1 2 3))) -> (+ 1 2 3)
有两种方法可以做到这一点。哪一个更好取决于你最终想要什么 通常,您可以在
`
(反引号)中使用,@
。对,@
下面的表单进行求值以生成一个列表,然后将其拼接到模板中:
* `(+ ,@'(1 2 3))
(+ 1 2 3)
* (eval `(+ ,@'(1 2 3)))
6
或者,如果您只想使用压缩在列表中的参数调用函数,则使用apply
函数会更方便:
* (apply #'+ '(1 2 3))
6
哦我一直在源文件和示例中看到
,@
,但我从来没有弄清楚它的作用(直到现在)。非常感谢。是的,如果你只是想把它传递给像+
这样的函数,那么这个答案的应用部分很可能就是你想要的。非常好!我支持应用方法,因为它是一个阴谋家