web-dev-qa-db-fra.com

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

Quel est un moyen simple de vérifier si un élément est dans une liste?

Quelque chose comme

(in item list)

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

31
Jeff

LISP commun

FIND n'est pas une bonne idée:

> (find nil '(nil nil))
NIL

Ci-dessus, cela signifierait que NIL n'est pas dans la liste (NIL NIL) - ce 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 de test est la valeur par défaut habituelle EQL). FIND renvoie un tel élément.

Utilisez MEMBER:

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

ou POSITION:

> (numberp (position nil '()))
NIL
42
Rainer Joswig

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

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

Contrairement à FIND, il peut également tester si NIL est dans la liste.

20
Terje Norderhaug

Vous pouvez utiliser find:

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

Pensez à utiliser :test argument:

(find "a" '("a" "b") :test #'equal)
7
khachik