common-lisp - 如何在Common Lisp中的宏之外拼接到列表?

标签 common-lisp

说我有一个函数foo:

(defun foo (x y &rest args) ...)

我以后想用功能栏包装它:

(defun bar (x &rest args) (foo x 100 args))

假设酒吧随后被这样称呼:(bar 50 1 2 3)

通过此设置,args是bar主体内的列表,其中包含尾随参数,因此当我将其传递给foo时,而不是获得(foo 50 100 1 2 3)的等效项时,我当然会得到(foo 50 100 '(1 2 3))。如果这些是宏,我会在bar主体内使用``(foo,x 100,@ args)`将args拼接到函数调用中。 ,@仅在反引号引起的列表中起作用。

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

最佳答案

APPLY将调用其第一个参数及其后续参数,而最后一个参数必须是列表。所以:

(apply #'foo x 100 args)

关于common-lisp - 如何在Common Lisp中的宏之外拼接到列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2627262/

相关文章:

common-lisp - 指示符的性质是什么?

lisp - SBCL 的统计分析器不显示每个调用的函数的条目

concurrency - 想要一个简单的程序来说明使用线程并发 lisp 的使用

lisp lambda 函数

lisp - 五上午 : fail to understand why this test fails

lisp - 如何从 Lisp 类导出槽和访问器?

通过 https 下载文件时出现 SSL 错误

sockets - 如何使用 SBCL 的套接字重用之前打开的端口?

compilation - 有没有办法在 Visual Studio Code 中编译 Lisp 源文件?

function - Lisp 标签函数在使用前被删除