2013-01-23 1 views
1

lisp에서 remove-duplicates 함수는 (a b c d)와 같은 간단한 목록에서만 작동합니다. 내 질문은 그 안에 중첩 된 목록이있는 목록에서 중복 된 요소를 제거 할 수있는 방법입니다. 그래서 예를lisp 내에서 중첩 된 목록을 가진 목록의 중복 요소 제거

에 대해 다음과 같이 나는 중첩 된 목록과 목록이 : ((0 1) (0 2) (0 1) (0 ~ 3))

나는 중 하나 (0 하나를 제거하려면

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

답변

6

:test #'equalremove-duplicates에를주고, 당신이 원하는 것을 할 것입니다)리스트 안에 두 번 반복 목록은 위 얻을 수 있습니다.

우리는 그들이 동일한 목록 (eq)하지 않는 한 CLHS: Satisfying a Two-Argument Test에 제공하지 #'eql:test 기본값 및 (0 1) 같은 두 개의 목록이 eql을하지시피.

CL-USER> (remove-duplicates '((0 1) (0 2) (0 1) (0 3)) :test #'equal) 
((0 2) (0 1) (0 3))