使用lisp中的嵌套列表删除列表的重复元素

Ali*_*i A 1 lisp list common-lisp duplicate-removal nested-lists

lisp中的函数remove-duplicatelicate仅适用于像(abcd)这样的简单列表.我的问题是我如何从列表中删除重复元素,其中包含嵌套列表.所以举个例子

我有一个嵌套列表的列表如下:((0 1)(0 2)(0 1)(0 3))

我想删除其中一个(0 1)列表,它在上面的列表中重复两次以获得:

((0 1)(0 2)(0 3))

Ant*_*nko 6

:test #'equalremove-duplicates,它会做你想要的.

正如我们在CLHS中看到的那样:满足双参数测试,: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))
Run Code Online (Sandbox Code Playgroud)