如何将特殊运算符应用于列表?

时间:2012-04-22 14:35:33

标签: lisp common-lisp

以下测试被拒绝:

CL-USER> (apply 'and '(t t t))
; Evaluation aborted on #<CCL::CALL-SPECIAL-OPERATOR-OR-MACRO #x3020013A1F3D>

我的第一个回答是试图将对and特殊运算符的调用封装成lambda或定义我自己的定义,但当然它无法工作。因为它会导致在&amp; rest参数上为apply调用'and函数...您将如何解决此问题?

1 个答案:

答案 0 :(得分:6)

使用EVERY函数。

(every #'identity '(t t t))  -> t

您无法应用特殊操作符。

下一个解决方案:

(reduce (lambda (a b) (and a b))
        '(t t t)
        :initial-value t)

不要将APPLY用于列表操作。使用REDUCE。