删除lisp中列表中的重复列表

时间:2014-02-05 21:23:48

标签: lisp common-lisp

如何删除common-lisp中列表中的重复列表? 我试过这个:

(remove-duplicates '( (1 2 3) (1 2 3)))                           

但它评估为((1 2 3) (1 2 3)),而不是((1 2 3))

感谢。

2 个答案:

答案 0 :(得分:8)

使用关键字参数:test指定定义两个项是否相互重复的函数。大多数lisp函数(包括remove-duplicates)默认使用eql来测试相等性。 eqlequal严格得多,这可能是你想要使用的。

 (remove-duplicates '((1 2 3) (1 2 3)) :test #'equal)

评估为'((1 2 3))

有关eqlequal之间差异的详细信息,请参阅this post

答案 1 :(得分:2)

尝试:

(remove-duplicates '((1 2 3) (1 2 3)) :test #'equal)