lisp 中的 remove-duplicates 函数仅适用于 (abcd) 之类的简单列表。我的问题是如何从包含嵌套列表的列表中删除重复元素。所以例如
我有一个嵌套列表如下: ( (0 1) (0 2) (0 1) (0 3) )
我想删除在上面的列表中重复两次的 (0 1) 列表之一以获得:
( (0 1) (0 2) (0 3) )
lisp 中的 remove-duplicates 函数仅适用于 (abcd) 之类的简单列表。我的问题是如何从包含嵌套列表的列表中删除重复元素。所以例如
我有一个嵌套列表如下: ( (0 1) (0 2) (0 1) (0 3) )
我想删除在上面的列表中重复两次的 (0 1) 列表之一以获得:
( (0 1) (0 2) (0 3) )
给: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))