在用户定义的函数中使用& body Lambda List Keyword

时间:2017-06-08 05:29:56

标签: clisp

在宏中使用&body的网络有很多例子。它只能由反引号内的,@body访问。但是我们如何在函数中使用&body lambda-list关键字。我尝试使用这个关键字创建了许多函数,但他们可以返回我的所有内容都是错误的 &BODY is not allowed in an ordinary lambda list: (&BODY PIKACHU)
(好吧,我的变量名是皮卡丘)。

尝试过的功能示例:

 (defun tester (&body pikachu)
           (mapcar #'+ @pikachu))

在这里,我在@前面使用了pikachu符号,因为我认为这会使我的pikachu成为一个列表(而不是raichu)。好吧,那没有发生,我得到了同样的错误 另一个版本:

(defun tester (&body pikachu)
           (mapcar #'+ pikachu))

这也给出了同样的错误。

然后根据this link&rest&body大致相同,&rest只需一个列表,&body采用隐式{{ 1}}参数。

这没有说实话。所以,我想知道progn在lisp函数中是如何工作的。

1 个答案:

答案 0 :(得分:1)

&body lambda列表元素。 你永远不能在一个函数中使用它。 &rest将在普通函数中用于相同的效果。

如果您阅读了链接到的新闻组主题,您会看到同样的事情:&rest@之间的唯一区别是程序员意图传达给读者。

PS。 {{1}}之外的{{1}}是非法的。