基于单个原子查找列表元素似乎工作正常:
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
怎么做?
答案 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)