如何在Common Lisp中拼接到宏外的列表?

der*_*fed 18 common-lisp

说我有一个函数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)).如果这些是宏,我会在条形体内使用``(foo,x 100,@ args)`将args拼接到函数调用中.但是,@只能在反引号列表中使用.

如何在常规函数中进行相同类型的拼接?

Xac*_*ach 33

APPLY将使用其后续参数调用其第一个参数,并且最后一个参数必须是列表.所以:

(apply #'foo x 100 args)
Run Code Online (Sandbox Code Playgroud)

  • 太容易了 (5认同)
  • @PuercoPop请参阅http://lisptips.com/post/11608641449/how-do-i-apply-and (3认同)