Lisp 如何判断列表是否包含零?
我有以下清单:Lisp 如何判断列表是否包含零?,lisp,common-lisp,Lisp,Common Lisp,我有以下清单: (X O X O X NIL X NIL O) 如果我执行(查找'x(xoxoxnilxnilo))它返回x,因此我知道列表包含x。但是如果我做了(find nil(xo X O X nil X nil O))我得到了nil,这是毫无意义的,因为即使我的列表中没有nil,我也会得到nil 我如何判断我的列表是否包含NILs?是否需要此工作 (or (map (lamdba (x) (eq? x nil)) '(X O X O X NIL X NIL
(X O X O X NIL X NIL O)
如果我执行(查找'x(xoxoxnilxnilo))
它返回x
,因此我知道列表包含x
。但是如果我做了(find nil(xo X O X nil X nil O))
我得到了nil
,这是毫无意义的,因为即使我的列表中没有nil
,我也会得到nil
我如何判断我的列表是否包含
NIL
s?是否需要此工作
(or
(map (lamdba (x)
(eq? x nil))
'(X O X O X NIL X NIL O)))
我现在没有安装CL,但我认为它会工作。(或者在CL中是这样工作的,对吗?或者有功能吗
编辑:
等等,零算假,对吗
(apply and '(X O X NIL))
;Or
(all '(X O X NIL))
;Whichever works in CL.
你可以用
不是你要找的
下面是一个例子:
(reduce #'(lambda (a b) (or a b))
(mapcar 'not '(1 2 3 4)))
它的处理器效率可能不如其他版本,但我可能会像用英语说的那样写:
(some #'null '(X O X O X NIL X NIL O))
eq?不是CL函数。仅供参考。:-)对不起,我习惯了Haskell和Scheme。任何
函数都是Ken建议的某些
。而应用和
将不起作用,因为和
是一个宏,但应用
只能与函数一起使用。也没有所有
函数,而是需要谓词的每个
notevery#“identity
与您的all
示例最相似,但我认为some#“null
比这更清楚。您的“alternative”注释是什么意思?该表达式返回(NIL-NIL-NIL)
,而或
什么也不做(除非列表为空),因为它只传递了一个值。实际上,CL中有三个谓词仅对NIL
为真not
用于将参数解释为布尔值的情况,endp
用于列表中的参数(如果不是列表,则会发出错误信号),null
是对nil
的常规检查,没有特定的语义。@Ken:Doh。那是我的错。
(some #'null '(X O X O X NIL X NIL O))