Vérifier si l'élément est dans une liste (Lisp)

Quelle est une façon simple de vérifier si un article est dans une liste?

quelque Chose comme

(in item list)

retour true si item=1 et list=(5 9 1 2) et false si item=7

27
demandé sur River 2011-05-27 00:08:20

3 réponses

Common Lisp

FIND n'est pas une bonne idée:

> (find nil '(nil nil))
NIL

ci-dessus signifierait que NIL n'est pas dans la liste (NIL NIL) - qui est faux.

Le but de FIND n'est pas de vérifier l'appartenance, mais de trouver un élément qui satisfait un test (dans l'exemple ci-dessus, la fonction test est la valeur par défaut habituelle EQL). FIND retourne un tel élément.

Utiliser MEMBER:

> (member nil '(nil nil))
(NIL NIL)  ; everything non-NIL is true

ou POSITION:

> (numberp (position nil '()))
NIL
40
répondu Rainer Joswig 2015-04-29 21:11:19

Utiliser MEMBER pour tester si un élément est dans une liste:

(member 1 '(5 9 1 2))  ; (1 2)

pas comme FIND, il est également capable de tester si NIL est dans la liste.

18
répondu Terje Norderhaug 2011-05-26 20:57:22

Vous pouvez utiliser find:

(find 1 '(5 9 1 2)) ; 1
(find 7 '(5 9 1 2)) ; nil

envisagez d'utiliser :test argument:

(find "a" '("a" "b") :test #'equal)
7
répondu khachik 2011-05-26 20:16:40