首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Common Lisp中,如何在宏外拼接到列表中?

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

Stack Overflow用户
提问于 2010-04-13 13:52:48
回答 2查看 4.3K关注 0票数 20

假设我有一个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 )`将参数拼接到函数调用中。然而,@只能在反引号引用的列表中工作。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-04-13 17:32:26

APPLY将调用带有后续参数的第一个参数,最后一个参数必须是列表。所以:

代码语言:javascript
复制
(apply #'foo x 100 args)
票数 35
EN

Stack Overflow用户

发布于 2011-03-24 10:12:31

这种方法速度很慢,但它可能就是您要找的。

反引号、逗号和逗号不仅仅适用于宏。如果你也使用eval,它们也可以在函数中使用。再说一次,这既不快也不高效。无论如何,它是这样的:

代码语言:javascript
复制
(defun bar (x &rest args)
  (eval `(foo ,x 100 ,@args)))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2627262

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档