setq - Compruebe si el elemento está en una lista(Lisp)
union de dos listas en lisp (3)
¿Qué es una forma sencilla de comprobar si un elemento está en una lista?
Algo como
(in item list)
puede devolver true
si item=1
y list=(5 9 1 2)
y false
si item=7
Puedes usar find
:
(find 1 ''(5 9 1 2)) ; 1
(find 7 ''(5 9 1 2)) ; nil
Considere usar :test
argumento de :test
:
(find "a" ''("a" "b") :test #''equal)
Lisp común
FIND
no es una buena idea:
> (find nil ''(nil nil))
NIL
Lo anterior significa que NIL
no está en la lista (NIL NIL)
, lo cual es incorrecto.
El propósito de FIND
no es verificar la membresía, sino encontrar un elemento que satisfaga una prueba (en el ejemplo anterior, la función de prueba es el EQL
predeterminado habitual). FIND
devuelve tal elemento.
Utilizar MEMBER
:
> (member nil ''(nil nil))
(NIL NIL) ; everything non-NIL is true
o POSITION
:
> (numberp (position nil ''()))
NIL
Use MEMBER
para comprobar si un elemento está en una lista:
(member 1 ''(5 9 1 2)) ; (1 2)
A diferencia de FIND
, también puede probar si NIL
está en la lista.