CL로 새로 워서 간단한 알고리즘으로 많은 것을 할 수 있습니다. 예를 들어, 목록의 모든 고유 요소를 제거하는 함수를 구현하려고했습니다. 이 코드에Common Lisp에서 문자열과 숫자의 핵심 차이점은 무엇입니까?
(1 2 2 3 3 4 5 3) -> (2 2 3 3 3)
첫 번째 시도 리드 :
(defun remove-unique (items)
(let ((duplicates (set-difference items (remove-duplicates items :test #'equal))))
(append duplicates (remove-duplicates duplicates :test #'equal))))
이 문자열 확인을 작동하지만 항상 숫자 NIL
를 반환 않습니다. set-difference
에 대해 조금 더 읽기 저는 중복 된 채워진리스트를 가지고 일하는 것이 아니라는 것을 배웠습니다. 제 경우에는 어떻게 든 작동합니다. 그래서 나는 이식 할 수없는 방식을 포기하고 함께 움직였습니다.
또 다른 시도는 다음과 같습니다
(defun remove-unique (items)
(loop for item in items
when (member item (cdr (member item items)))
collect item))
을 그리고이 숫자로 확인 작동하지만 문자열을 NIL
반환합니다.
분명히 이해할 수없는 문자열과 숫자의 핵심 차이점이 있습니다. member
과 set-difference
과 같은 목록 처리 기능이 어떻게 다르게 작동합니까?
'member'도 목록 항목에 적용 할 비교의 종류를 지정하는 술어를 취합니다. –
감사! 나는 그것에 대해 정말로 잊었다. 그러나 문자열의 경우 여전히 'NIL'입니다. – akalenuk
실제로'test'가 누락되었습니다. 두 번째 테스트를 할 때 중복이없는 목록을 입력했습니다 .--) 그것이 나에게 전혀주지 않은 것은 당연합니다. – akalenuk