使用宏作为函数

时间:2013-02-13 11:26:36

标签: common-lisp

我是Common Lisp的新手,所以这让我感到有点难过,谷歌让我失望。

我的函数sizzle定义为

(defun sizzle (f &rest r) ...blah blah...)

现在我只需要检查所有可选参数是否都是非零的,所以很自然地我做了

(apply #'and r)

...然后事实证明and不是一个函数,它是一个宏(我还没有到目前为止)。

所以,我的问题是,是否有一种方法可以将宏用作函数(就像上面一样),或者我应该只使用自己的函数来检查所有值是否为给定列表都是非零的?或者还有另一种我没有想过的方法吗?

1 个答案:

答案 0 :(得分:6)

您不能将宏用作函数(这就是为什么它更好地创建一些函数,这就是为什么编译器宏而不是常规宏用于优化的原因)

我会使用(every #'identity r)(notany #'null r)而不是为您的示例编写我自己的AND函数。