2013-02-13 64 views
2

我是Common Lisp的新手,所以這讓我有點難倒,Google讓我失望了。使用宏作爲函數

我有一個函數sizzle

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

定義,現在我只需要檢查是否所有的可選參數都非空,所以很自然我也

(apply #'and r) 

...然後事實證明,and不是一個函數,它是一個宏(我還沒有弄清楚)。所以,我的問題是,有沒有辦法使用宏作爲函數(很像上面),或者我應該只是自己的函數來檢查是否所有的值是給定的列表是非零?或者還有另一種我沒有想到的方法?

+0

OP在詢問是否可以像函數那樣使用宏。 (答案是「否」。) – 2013-02-13 18:16:28

回答

6

您不能使用宏作爲函數(這就是爲什麼做一些函數更好,這就是爲什麼使用編譯器宏而不是常規宏來優化)。

我會使用(every #'identity r)(notany #'null r)而不是自己寫AND函數爲你的例子。