假设我有一个foo函数:
(defun foo (x y &rest args) ...)
稍后我想用一个函数栏来包装它:
(defun bar (x &rest args) (foo x 100 args))
假设bar随后被这样调用:(bar 50 1 2 3)
在这个设置中,args是bar主体中的一个列表,其中包含尾随参数,所以当我将它传递给foo时,我当然会获得(foo 50 100 '(1 2 3))
,而不是(foo 50 100 1 2 3)
的等价物。如果这些是宏,我会在bar的主体中使用(foo,x100,@ args )`将参数拼接到函数调用中。然而,@只能在反引号引用的列表中工作。
如何在常规函数中进行相同类型的拼接?
发布于 2010-04-13 17:32:26
APPLY将调用带有后续参数的第一个参数,最后一个参数必须是列表。所以:
(apply #'foo x 100 args)
发布于 2011-03-24 10:12:31
这种方法速度很慢,但它可能就是您要找的。
反引号、逗号和逗号不仅仅适用于宏。如果你也使用eval,它们也可以在函数中使用。再说一次,这既不快也不高效。无论如何,它是这样的:
(defun bar (x &rest args)
(eval `(foo ,x 100 ,@args)))
https://stackoverflow.com/questions/2627262
复制相似问题