如何判断列表是否包含NIL?

时间:2011-02-16 22:09:47

标签: lisp common-lisp

我有以下列表:

(X O X O X NIL X NIL O)

如果我(find 'x (X O X O X NIL X NIL O)),则会返回X,因此我知道该列表包含X。但是如果我(find nil (X O X O X NIL X NIL O))我得到NIL,这是没有意义的,因为即使我的列表中没有NIL,我也会得到NIL

如何判断我的列表是否包含NIL

4 个答案:

答案 0 :(得分:3)

您可以使用position

(position NIL '(X O X O X NIL X NIL O))
--> 5

答案 1 :(得分:3)

它可能不像其他人那样处理器效率,但我可能会写得非常像我用英语说的那样:

(some #'null '(X O X O X NIL X NIL O))

答案 2 :(得分:0)

这样的事情会起作用吗?

(or 
  (map (lamdba (x)
    (eq? x nil))
       '(X O X O X NIL X NIL O)))

我现在没有安装CL,但我认为它会起作用。 (或在CL中以这种方式工作,对吗?还是有any函数?

编辑:

等一下,nil算作假,对吧?

(apply and '(X O X NIL))
;Or 
(all '(X O X NIL))
;Whichever works in CL.

答案 3 :(得分:-1)

NOT正是您要找的。

以下是一个例子:

 (reduce #'(lambda (a b) (or a b))
   (mapcar 'not '(1 2 3 4)))