재귀를 사용하여 목록에서 중복을 제거하려고합니다. 이것이 내가 가진 것입니다. 첫 번째 복제본 만 제거하고 전체 복제본은 제거하지 않습니다.스키마의 목록에서 모든 중복 멤버 제거
제 생각에는 첫 번째 멤버를 살펴보고 나머지 구성원의 구성원이 해당 함수를 다시 호출하는지 확인하십시오. 그렇지 않은 경우 첫 x 째 bv와 함수를 다시 호출 한 결과로 목록을 작성하십시오. 나는 그것이 왜 모든 중복을 제거하지 않는지 이해할 수 없다.
(define (removeDupes L)
(cond ((null? L)())
((list? (member (car L) (cdr L))) removeDupes (cdr L))
(#T (cons ((car L) (removeDupes (cdr L)))))))
이것은 내가 수정 한 것입니다. 그리고 나는 죄수들에게 무엇이 잘못된 것인지 이해합니다. 그것은 두 개의 매개 변수를 필요로하고 나는 그것만을 주었다. 나는 아직도 세 번째 줄이 작동하지 않은 이유를 모른다 ....이없는
(define (removeDupes L)
(cond ((null? L)())
((list? (member (car L) (cdr L)))(removeDupes(cdr L)))
(#T (cons (car L) (removeDupes (cdr L))))))
서식을 고정했지만 형식은 고정되어 있습니다. 물론 가짜 인 것들. :-) –
편집 : 나는 어떤 종류의 Lisp와 Scheme 코딩을하기 위해서 [Paredit] (http://mumble.net/~campbell/emacs/paredit.html)을 강력히 추천한다. 브래킷은 항상 다른 모든 유용한 기능과 항상 균형을 유지합니다. –
OK, 모든 버그를 수정했습니다. 그것은 당신이 왜 그것이 도움이되었는지 전혀 모른다는 것에 약간의 걱정입니다! 아마도 당신은 다음과 같은 매우 중요한 것을 놓치고 있습니다. Scheme의 괄호는 수학에서 괄호와 같은 역할을 수행하지 않습니다. '((x))'는 원격으로'(x)'와 똑같은 것이 아니며'x'와는 같은 것이 아닙니다. 일반적으로 Scheme 코드에서'(a b c d)'는 다음과 같은 것을 의미합니다 :'b','c', d'를 인자로하여'a' 함수를 호출하십시오. 이것을'((a b c d))'또는'(a (b c) d)'또는 무엇인가로 바꾸면 의미가 완전히 다릅니다. –