lisp中的函数remove-duplicates仅适用于像(a b c d)这样的简单列表。 我的问题是我如何从列表中删除重复元素,其中包含嵌套列表。例如,
我有一个嵌套列表的列表如下:((0 1)(0 2)(0 1)(0 3))
我想删除其中一个(0 1)列表,它在上面的列表中重复两次以获得:
((0 1)(0 2)(0 3))
答案 0 :(得分:6)
将:test #'equal
提供给remove-duplicates
,它会做你想要的。
正如我们在CLHS: Satisfying a Two-Argument Test中看到的那样,:test
默认为#'eql
未给出,(0 1)
等两个列表不是eql
,除非它们是相同的列表(eq
)。
CL-USER> (remove-duplicates '((0 1) (0 2) (0 1) (0 3)) :test #'equal)
((0 2) (0 1) (0 3))