두리스트의 교집합을 얻을 수있는 코드가 있습니다. 그러나 나는 목록에서 모든 중복을 제거하고 싶습니다. 나는 remove-duplicates()
함수를 사용한다. 내가 사용할 때마다 drRacket은 다음과 같은 에러를 낸다.스키마의 교차리스트에서 중복을 제거합니다.
이 내 코드를응용 프로그램 : 절차 없음; (abccd) 인수 ... : 인수에 적용 할 수있는 절차 주어진 예상 [없음] 여기
#lang scheme
(define (intersect lst1 lst2)
(removedup(lst1 lst2))
(cond
((null? lst1)(quote()))
((isin? (car lst1) lst2)
(cons (car lst1)
(intersect (cdr lst1) lst2)))
(else (intersect (cdr lst1) lst2))))
(define (removedup lst1 lst2)
(remove-duplicates(lst1))
(remove-duplicates(lst2))
)
(define (isin? a lat)
(cond
((null? lat) #f)
(else (or (equal? (car lat) a)
(isin? a (cdr lat))))))
내 입력 > (intersect '(a b c c d) '(c d e f))
입니다 아무도 내 문제를 해결할 수 있습니까? 미리 감사드립니다.
감사합니다. 오류를 제거하도록 관리합니다. 그러나 나는 아직도 내가 원하는 결과를 얻지 못한다. 내 입력은> (교차 '(a b c c d)'(c d e f))입니다. 그리고 내 출력은 (c c d)입니다. 나는 내 결과물을 (c d) 원한다. – LvanRooij
@LvanRooij Racket은 함수형 프로그래밍 언어이며 대부분의 함수는 가능한 경우 순수합니다. 'remove-duplicates'는 인수를 수정하지 않습니다 (사실, 목록은 Racket에서 불변입니다), 단순히 중복을 제거한 새로운 목록을 반환합니다. 반환 값을'remove-duplicates'로 감싸고, 부작용으로 호출하지 말아야합니다. –
테스트 케이스가 핵심입니다. 또한 함수를 평가하는 방법을 잘 모르는 경우 스테퍼를 사용하여 직감을 구축하십시오. 프로그래머가되기 위해서는 무슨 일이 일어나고 있는지에 대한 가설을 세우고 테스트해야합니다. –