2010-11-25 24 views
5

Je pourrais trouver un moyen de le faire moi-même, mais j'ai le sentiment qu'il existe une façon plus simple, peut-être intégrée, de le faire. Je veux voir si deux listes partagent un élément. Ce sont les deux listes que je traite au moment:Comparer des listes 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)) 

Puisque les deux listes contiennent (1 3 7), je voudrais une comparaison des listes de retourner T.

Existe-t-il une meilleure façon de faire cela que de simplement mettre en place un couple DOLIST s?

Répondre

8

Que diriez-vous de 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

Nice! C'est exactement ce que je voulais. Merci. –