Prueba si array está dentro de una lista en lisp

Tengo dos artículos El primero, a-child , es una lista que contiene una matriz como su primer elemento y luego algunas cadenas como los elementos restantes. El otro, mapped , es una lista que contiene un número de matrices. Por inspección, es fácil ver que a-child está mapped , aunque no puedo encontrar una función que lo encuentre para mí.

Me disculpo por el pobre estilo de lisp a continuación. Empecé hace unos días, así que aún no he recogido todas las convenciones.

 (defparameter a-child (list (#2A((1 2 3) (7 4 5) (9 8 6))) "U" "R" "R")) (defparameter mapped (list (#2A((1 2 3) (7 4 5) (9 8 6))) (#2A((1 2 3) (4 5 6) (7 8 9))))) (find (car a-child) mapped) ;;returns NIL (member (car a-child) mapped) ;;returns NIL (position (car a-child) mapped) ;;returns NIL (equalp (car a-child) (car mapped)) ;;returns T 

¿Qué función puedo usar para buscar matrices dentro de una lista de matrices? Gracias.

La respuesta

Las funciones de secuencia marcadas como “devuelve NIL” devolverán T si pasa :test #'equalp a ellas.

La razón

La Prueba de Dos Argumentos predeterminada en Common Lisp es eql .

Es la elección más razonable entre las 4 (!) Funciones de comparación de propósito general provistas por el estándar ANSI CL:

  • eq depende demasiado de la implementación y no funciona como uno probablemente quiera en números y caracteres

  • objetos transversales equal y equal y por equalp tanto toman mucho tiempo para los grandes y nunca pueden terminar para los circulares.

Vea también la diferencia entre eq, eql, equal y equalp en Common Lisp .