Chapter 2, Building Abstractions with Data

Section - 2.3 Symbolic Data

Exercise 2.59


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#lang sicp

(#%require (only racket/base error))

(define (union-set set1 set2)
  (cond ((null? set1) set2)
        ((null? set2) set1)
        ((element-of-set? (car set1) set2) (union-set (cdr set1) set2))
        (else (cons (car set1) (union-set (cdr set1) set2)))
  )
)  

(define (element-of-set? x set)
  (cond ((null? set) false)
        ((equal? x (car set)) true)
        (else (element-of-set? x (cdr set)))
  )
)

Test/Output:

1
2
3
> (display (union-set (list 1 0 5 2 9) (list 10 1 19 5 50)))
(0 2 9 10 1 19 5 50)
>