2

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

我有一个sizzle定义的函数

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

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

(apply #'and r)

...然后事实证明这and不是一个函数,它是一个宏(我还没有考虑到)。

所以,我的问题是,有没有办法将宏用作函数(很像上面),或者我应该只创建自己的函数来检查给定列表中的所有值是否非零?或者还有另一种我没有想到的方法?

4

1 回答 1

6

您不能将宏用作函数(这就是为什么最好让某些东西发挥作用,这就是为什么使用编译器宏而不是常规宏进行优化的原因)。

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

于 2013-02-13T11:32:52.083 回答