比较Lisp中的列表

时间:2010-11-25 03:17:56

标签: lisp common-lisp clisp

我自己可以找到一些方法来做到这一点,但我觉得有一个更简单,也许是内置的方法来做到这一点。我想看看是否有任何两个列表共享一个元素。这些是我目前正在处理的两个列表:

((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)) 

由于两个列表都包含(1 3 7),因此我希望对列表进行比较以返回T

除了设置一对DOLIST之外,还有更好的方法吗?

1 个答案:

答案 0 :(得分:8)

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