使用宏作为函数

jay*_*ica 2 common-lisp

我是Common Lisp的新手,所以这让我有点难过,Google让我失望了.

我有一个sizzle定义的功能

(defun sizzle (f &rest r) ...blah blah...)
Run Code Online (Sandbox Code Playgroud)

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

(apply #'and r)
Run Code Online (Sandbox Code Playgroud)

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

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

Ant*_*nko 6

你不能使用宏作为函数(这就是为什么最好做一些函数,这就是编译器宏而不是常规宏用于优化的原因).

我会使用(every #'identity r)(notany #'null r)代替编写我自己的AND函数作为你的例子.