SICP 연습문제 2.59 친절한 풀이

문제

차례 없는 리스트를 써서 집합을 표현한다고 할 때, union-set 연산을 구현하라.

문제로 부터 얻은 것

합집합 프로시저를 어떻게 구현해야 하는지에 대한 생각을 하게 해주었습니다.

문제풀이

문제 풀이에 필요한 프로시저입니다.

(define (element-of-set? x set)
(cond ((null? set) #f)
((equal? x (car set)) #t)
(else (element-of-set? x (cdr set)))))



책에서 intersection-set을 정의한 것과 비슷하게 재귀를 통해 합집합을 정의할 수 있습니다. set1과 set2의 합집합은, (car set1)이 set2에 포함되어 있으면, (cdr set1)과 set2의 합집합과 같고, 포함되어 있지 않으면, (cdr set1)과 (cons (car set1) set2)의 합집합과 같습니다.

(define (union-set s1 s2)
(cond ((null? s1) s2)
((null? s2) s1)
((element-of-set? (car s1) s2)
(union-set (cdr s1) s2))
(else (union-set (cdr s1)
(cons (car s1) s2)))))

합집합 (1 2 3 4 5 6)을 반환하는 모습



읽어주셔서 감사합니다.