중복 목록을 common-lisp 목록에서 제거하려면 어떻게합니까?목록에서 중복 목록을 제거합니다.
(remove-duplicates '((1 2 3) (1 2 3)))
그러나 ((1 2 3) (1 2 3))
하지 ((1 2 3))
로 평가 이 시도.
감사합니다.
중복 목록을 common-lisp 목록에서 제거하려면 어떻게합니까?목록에서 중복 목록을 제거합니다.
(remove-duplicates '((1 2 3) (1 2 3)))
그러나 ((1 2 3) (1 2 3))
하지 ((1 2 3))
로 평가 이 시도.
감사합니다.
이 두 항목이 서로 중복 있는지 여부를 정의하는 함수를 지정하는 키워드 인수 :test
를 사용합니다. remove-duplicates
을 포함한 대부분의 lisp 함수는 eql
을 사용하여 기본적으로 동등성을 테스트합니다. eql
은 equal
보다 훨씬 엄격합니다.
(remove-duplicates '((1 2 3) (1 2 3)) :test #'equal)
이 값은 '((1 2 3))
입니다.
eql
과 equal
의 차이점에 대한 자세한 내용은 this post을 참조하십시오.
시도 :
(remove-duplicates '((1 2 3) (1 2 3)) :test #'equal)
"두 번째 선택적 인수"가 아닙니다. 'test'는 키워드 인수입니다. 키워드 인수의 순서는 중요하지 않습니다. 예를 들어'(중복 제거 목록 : 테스트 '동일 함 : 끝점 t)'또는 ((중복 제거 목록 : 끝에서 끝 t : 테스트 '같음)'을 수행 할 수 있으며 결과는 동일합니다. Common Lisp의 선택적 인수는 _position_ 기반이지만 키워드 인수는 없습니다. –
@ JoshuaTaylor 좋은 지적. 편집 중. – ApproachingDarknessFish