可以找到用于查找另一个列表中的列表吗?

时间:2013-11-17 10:06:09

标签: lisp common-lisp

基于单个原子查找列表元素似乎工作正常:

CL-USER> (find 1 (list 5 4 3 2 1))
1

但是如何在列表中查找列表呢?

CL-USER> (find (list 1 2) (list (list 3 4) (list 1 2)))
NIL

怎么做?

1 个答案:

答案 0 :(得分:4)

默认情况下,

FIND使用EQL来测试元素。但是,对于列表,此测试仅在两个对象相同时(即,如果它们是EQ)才返回true,而不是如果它们具有相同的元素。

因此:

(find (list 1 2) (list (list 1 2) (list 1 2 3))) ==> NIL

(let ((L1 (list 1 2))
      (L2 (list 1 2 3)))
  (find L1 (list L1 L2))) ==> (1 2)

但您也可以指定不同的测试功能

(find (list 1 2) (list (list 1 2) (list 1 2 3))
      :test #'EQUAL) ==> (1 2)