2013-01-23 141 views
1

lisp中的remove-duplicates函數只適用於簡單的列表,如(a b c d)。 我的問題是,我如何從列表中嵌套列表中刪除重複的元素。因此,例如刪除lisp中嵌套列表的重複元素

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

和我想刪除的一個(0 1 ),這是該列表內重複兩次以上列出來獲得:

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

回答

6

:test #'equalremove-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))