以下测试被拒绝:
CL-USER> (apply 'and '(t t t))
; Evaluation aborted on #<CCL::CALL-SPECIAL-OPERATOR-OR-MACRO #x3020013A1F3D>
我的第一个回答是试图将对and
特殊运算符的调用封装成lambda或定义我自己的定义,但当然它无法工作。因为它会导致在&amp; rest参数上为apply
调用'and
函数...您将如何解决此问题?
答案 0 :(得分:6)
使用EVERY函数。
(every #'identity '(t t t)) -> t
您无法应用特殊操作符。
下一个解决方案:
(reduce (lambda (a b) (and a b))
'(t t t)
:initial-value t)
不要将APPLY用于列表操作。使用REDUCE。