unir setq recursividad listas imprimir ejercicios ejemplos aplanar list lisp common-lisp

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.