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