¿Cuál es una forma sencilla de verificar si un artículo está en una lista?Verificar si el artículo está en una lista (Lisp)
Algo así como
(in item list)
podría volver true
si item=1
y list=(5 9 1 2)
y false
si item=7
¿Cuál es una forma sencilla de verificar si un artículo está en una lista?Verificar si el artículo está en una lista (Lisp)
Algo así como
(in item list)
podría volver true
si item=1
y list=(5 9 1 2)
y false
si item=7
Common Lisp
FIND
no es una buena idea:
> (find nil '(nil nil))
NIL
encima significaría que NIL
no está en la lista (NIL NIL)
- que está mal.
El propósito de FIND
no es comprobar la membresía, sino encontrar un elemento que satisfaga una prueba (en el ejemplo anterior, la función de prueba es la predeterminada predeterminada EQL
). FIND
devuelve un elemento de este tipo.
Uso MEMBER
:
> (member nil '(nil nil))
(NIL NIL) ; everything non-NIL is true
o POSITION
:
> (numberp (position nil '()))
NIL
Usted puede utilizar find
:
(find 1 '(5 9 1 2)) ; 1
(find 7 '(5 9 1 2)) ; nil
considerar el uso de :test
argumento:
(find "a" '("a" "b") :test #'equal)
Uso MEMBER
para probar si un elemento está en una lista:
(member 1 '(5 9 1 2)) ; (1 2)
A diferencia FIND
, también puede probar si NIL
está en la lista.
Última respuesta. Pero para los principiantes, también puede usar una combinación de las soluciones anteriores para cadenas.
(member "b" '("a" "b" "c") :test #'equal)
Resultado:
("b" "c")
(encontrar nil '(nil nil)) -> nil –
sintaxis Lisp destacando en SO es simplemente horrible ... – rvighne