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

yve*_*mes 2 lisp common-lisp

以下测试被拒绝:

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...你将如何解决这个问题?

Rai*_*wig 6

请改用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.

  • 还要考虑`(not(find nil list))`或`(not(member nil list))`.`find`也适用于矢量. (2认同)