假设我有一个带有 3 个参数的函数 Foo。例如,Foo 将这 3 个数字相加。
(defun Foo (a b c)
(+ a b c)
然后我就有了这 3 个值的列表。 有没有办法分解这个列表,以便每个值都绑定(bind)到参数?
(setf list (list 1 2 3))
> (1 2 3)
(Foo (dissolve list))
> 6
我想到的唯一选择是使用宏,但后来我收到错误,@ 不能紧接在反引号之后。
(defmacro dissolve (list)
`,@list)
我知道,答案之一是在 Foo 函数中使用 &rest,但我不想这样做。我只是想知道是否有这样的构造可以从函数外部修复这个问题。
最佳答案
是的,它叫apply
:
(apply #'+ '(1 2 3))
=> 6
你所要求的,(Foo (dissolve list))
,是不可能的,因为Lisp的评估规则:Foo
是一个函数,你的表单传递的是恰好有一个参数。
关于lisp - 如何在 Common Lisp 中分解或拼接列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74141572/