使用宏作为函数
问题描述:
我是Common Lisp的新手,所以这让我有点难倒,Google让我失望了。使用宏作为函数
我有一个函数sizzle
像
(defun sizzle (f &rest r) ...blah blah...)
定义,现在我只需要检查是否所有的可选参数都非空,所以很自然我也
(apply #'and r)
...然后事实证明,and
不是一个函数,它是一个宏(我还没有弄清楚)。所以,我的问题是,有没有办法使用宏作为函数(很像上面),或者我应该只是自己的函数来检查是否所有的值是给定的列表是非零?或者还有另一种我没有想到的方法?
答
您不能使用宏作为函数(这就是为什么做一些函数更好,这就是为什么使用编译器宏而不是常规宏来优化)。
我会使用(every #'identity r)
或(notany #'null r)
而不是自己写AND
函数为你的例子。
OP在询问是否可以像函数那样使用宏。 (答案是“否”。) – 2013-02-13 18:16:28