Как мне узнать, содержит ли список NIL? - PullRequest
4 голосов
/ 17 февраля 2011

У меня есть следующий список:

(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 ]

3 голосов
/ 17 февраля 2011

Возможно, он не так эффективен, как другие, но я, скорее всего, напишу его так, будто говорю по-английски:

(some #'null '(X O X O X NIL X NIL O))
3 голосов
/ 17 февраля 2011

Вы можете использовать Положение

(position NIL '(X O X O X NIL X NIL O))
--> 5
0 голосов
/ 17 февраля 2011

NOT - это то, что вы ищете.

Вот пример:

 (reduce #'(lambda (a b) (or a b))
   (mapcar 'not '(1 2 3 4)))
0 голосов
/ 17 февраля 2011

Хотелось бы что-нибудь подобное?

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

У меня сейчас нет CL, но я думаю, что это сработает. (или так работает в CL, верно? или есть функция any?

EDIT:

Подождите секунду, ноль считается ложным, верно?

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