Lisp 如何对列表应用特殊运算符?
以下试验被拒绝:Lisp 如何对列表应用特殊运算符?,lisp,common-lisp,Lisp,Common Lisp,以下试验被拒绝: CL-USER> (apply 'and '(t t t)) ; Evaluation aborted on #<CCL::CALL-SPECIAL-OPERATOR-OR-MACRO #x3020013A1F3D> CL-USER>(应用“和”(t)) ; 评估在上中止# 我的第一个回答是试图将对和特殊运算符的调用封装到lambda中,或者定义我自己的定义,但当然它无法工作。因为这将导致调用的应用函数和&rest参数上的。。。您将如何解决此问题?请改用该
CL-USER> (apply 'and '(t t t))
; Evaluation aborted on #<CCL::CALL-SPECIAL-OPERATOR-OR-MACRO #x3020013A1F3D>
CL-USER>(应用“和”(t))
; 评估在上中止#
我的第一个回答是试图将对
和特殊运算符的调用封装到lambda中,或者定义我自己的定义,但当然它无法工作。因为这将导致调用的应用
函数和&rest参数上的
。。。您将如何解决此问题?请改用该函数
(every #'identity '(t t t)) -> t
不能使用特殊运算符
下一个解决方案:
(reduce (lambda (a b) (and a b))
'(t t t)
:initial-value t)
不要对列表操作使用“应用”。使用REDUCE。抱歉,它似乎不起作用?CL-USER>(每个‘和’(t)’(t));在#上中止了评估。我在那个上面加了-1,因为它不起作用,只要你不提供一个有效的例子。@yvesBaumes Try(每个#'标识'(t t t))都有一些文档。@yves Baumes:每个序列都需要一个参数的谓词。好的,谢谢。我没有先得到它。我删除了a+1的-1,并接受了您的答案!:-)也要考虑<代码>(不(查找NILList))或<代码>(不(成员NILList))< /COD>。代码>查找
也适用于向量。