Common lisp 使用宏作为函数

Common lisp 使用宏作为函数,common-lisp,Common Lisp,我对CommonLisp还不熟悉,所以这让我有点困惑,谷歌让我失望了 我有一个函数sizzle定义如下 (defun sizzle (f &rest r) ...blah blah...) 现在我只需要检查所有可选参数是否都是非零的,所以我很自然地这样做了 (apply #'and r) …然后发现,和不是一个函数,而是一个宏(我还没来得及解释) 所以,我的问题是,有没有一种方法可以将宏用作函数(就像上面所说的那样),或者我应该创建自己的函数来检查给定列表中的所有值是否为非零?或者还

我对CommonLisp还不熟悉,所以这让我有点困惑,谷歌让我失望了

我有一个函数
sizzle
定义如下

(defun sizzle (f &rest r) ...blah blah...)
现在我只需要检查所有可选参数是否都是非零的,所以我很自然地这样做了

(apply #'and r)
…然后发现,
不是一个函数,而是一个宏(我还没来得及解释)


所以,我的问题是,有没有一种方法可以将宏用作函数(就像上面所说的那样),或者我应该创建自己的函数来检查给定列表中的所有值是否为非零?或者还有其他我没有想到的方法吗?

你不能将宏用作函数(这就是为什么让某些东西成为函数更好,这就是为什么编译器宏而不是常规宏用于优化的原因)


我会使用
(每个#'标识r)
(不含任何空r)
,而不是编写自己的
函数作为示例。

OP询问是否可以使用类似宏的函数。(答案是“不”。)