2011-05-26 17 views

Respuesta

38

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 
7

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) 
+6

(encontrar nil '(nil nil)) -> nil –

+3

sintaxis Lisp destacando en SO es simplemente horrible ... – rvighne

17

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.

0

Ú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") 
Cuestiones relacionadas