2011-09-21 8 views
0
;checks to see if two sets (represented as lists) are equal 

(define (setsEqual? S1 S2) 
(cond 
((null? (cdr S1)) (in_member S1 S2)) 
((in_member (car S1) S2) (setsEqual? (cdr S1) S2)) 
(else false))) 

;checks for an element in the list 
(define (in_member x list) 
(cond 
((eq? x (car list)) true) 
((null? list) false) 
(else (in_member x (cdr list))))) 

이 작업을 수행하는 기본 사례를 찾을 수 없습니다. 어떤 도움을 주셔서 감사합니다!두 세트가 같은지 확인 - 구성표

+0

가 추가되었으므로 숙제 태그가 추가되었습니다. –

답변

3

집합이란 무엇입니까? (목록입니다. 좋아요, 목록은 무엇입니까?) 여기에 힌트가 있습니다. "목록"의 두 가지 변종이 있습니다 : (일명 null, 일명 empty) 및 cons으로 만든 것. 귀하의 기능은 그들이 소비하는 데이터의 구조를 따라야합니다. 너는 그렇지 않아.

나는 How to Design Programs (온라인 텍스트 제공)을 읽기를 권장합니다. 이런 문제를 해결하기위한 "디자인 레시피"를 가르쳐 줄 것입니다. 대략적인 개요는 데이터를 반 형식적으로 기술하는 것 (은 무엇입니까?)은 예제와 테스트를 공식화합니다. 해당 데이터를 처리하기 위해 데이터에 대한 설명을 사용하여 템플릿을 작성하십시오. 마지막으로 템플릿을 채우십시오. 중요한 점은 템플릿이 데이터 정의에 의해 결정된다는 것입니다. 재사용이 가능하며 템플릿과 예제를 올바르게 작성한 경우 으로 특정 기능을위한 템플릿을 채울 수 있습니다.

HtDP 제 9 장에서는 목록 처리에 대해 설명합니다. 그러면 in_member에 도움이됩니다. 17 장에서는 여러 개의 복잡한 인수 (예 : 한 번에 두 개의 목록)를 처리하는 방법에 대해 설명합니다. 한 가지 더 힌트 :이 함수를 작성하는 경우, 세트에 대한 다음 사실을 사용합니다. 두 세트는 각각이 다른 세트의 서브 세트 인 경우 동일합니다.

관련 문제