在普通 lisp 中展开 / splat 参数

Posted

技术标签:

【中文标题】在普通 lisp 中展开 / splat 参数【英文标题】:Unroll / splat arguments in common lisp 【发布时间】:2011-01-21 16:56:43 【问题描述】:

假设我有一个参数列表:

> (setf format-args `(t "it's ~a" 1))  
(T "it's ~a" 1)

我怎样才能将它“splat”或“展开”成一系列参数而不是单个列表参数,以提供给格式函数? 即我希望进行以下函数调用:

> (format t "it's ~a" 1)

作为参考,我会在 python 或 ruby​​ 中编写以下内容:

format(*format-args)

我确信可以做到,但也许我想错了。这个操作的名称似乎并没有得到很好的认同,这也无济于事......

【问题讨论】:

【参考方案1】:

哎呀!我应该记得 javascript 是如何做到的。

原来你使用了 apply 函数,如下所示:

(apply #'format format-args)

【讨论】:

以上是关于在普通 lisp 中展开 / splat 参数的主要内容,如果未能解决你的问题,请参考以下文章

Splitview 转场和展开

Shell参数展开

... 语法记录

从包含双引号的数组中展开参数

第21课 可变参数模板_展开参数包

为啥这个python表达式参数在调用时没有展开?