2010-11-25 28 views
5

Pude encontrar alguna forma de hacerlo yo mismo, pero tengo la sensación de que hay una manera más simple, quizás integrada, de hacerlo. Quiero ver si dos listas comparten un elemento. Estas son las dos listas que trato en este momento:Comparando listas en Lisp

((0 1 2) (3 4 5) (6 7 8) (0 3 6) (1 3 7) (2 4 8) (0 4 8) (2 4 6)) 

((0 1 7) (0 1 6) (0 1 3) (0 3 7) (0 3 6) (0 6 7) (1 3 7) (1 3 6) (1 6 7) (3 6 7)) 

Dado que ambas listas contienen (1 3 7), me gustaría una comparación de las listas para volver T.

¿Hay una mejor manera de hacer esto que simplemente configurar un par DOLIST s?

Respuesta

8

¿Qué tal INTERSECTION?

(defvar a '((0 1 2) (3 4 5) (6 7 8) (0 3 6) (1 3 7) (2 4 8) (0 4 8) (2 4 6))) 
=> A 
(defvar b '((0 1 7) (0 1 6) (0 1 3) (0 3 7) (0 3 6) (0 6 7) (1 3 7) (1 3 6) (1 6 7) (3 6 7))) 
=> B 
(intersection a b :test 'equal) 
=> ((1 3 7) (0 3 6)) 
+0

¡Guau! Eso es exactamente lo que quería. Gracias. –

Cuestiones relacionadas