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
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
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.
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)