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

Buf*_*lls 1 lisp common-lisp

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

(remove-duplicates '( (1 2 3) (1 2 3)))                           
Run Code Online (Sandbox Code Playgroud)

但它评估的 ((1 2 3) (1 2 3))不是((1 2 3)).

谢谢.

App*_*ish 8

使用keyword参数:test指定定义两个项是否相互重复的函数.大多数lisp函数,包括remove-duplicates,eql默认情况下用于测试相等性.eqlequal你想要使用的要严格得多.

 (remove-duplicates '((1 2 3) (1 2 3)) :test #'equal)
Run Code Online (Sandbox Code Playgroud)

这评估为'((1 2 3)).

有关和之间区别的更多详细信息,请参阅此帖子.eqlequal

  • 这不是"第二个可选参数"; `test`是一个关键字参数.关键字参数的顺序无关紧要.例如,你可以做`(删除重复列表:测试'相等:从结尾t)`或`(删除重复列表:从结尾t:测试'相等)`并且结果将是相同的.Common Lisp中的可选参数是_position_,但关键字参数不是. (2认同)