Blob


1 (define (entry tree) (car tree))
2 (define (left-branch tree) (cadr tree))
3 (define (right-branch tree) (caddr tree))
4 (define (make-tree entry left right)
5 (list entry left right))
7 (define (element-of-set? x set)
8 (cond ((null? set) #f)
9 ((= x (entry set)) #t)
10 ((< x (entry set))
11 (element-of-set? x (left-branch set)))
12 ((> x (entry set))
13 (element-of-set? x (right-branch set)))))
15 (define (adjoin-set x set)
16 (cond ((null? set) (make-tree x '() '()))
17 ((= x (entry set)) set)
18 ((< x (entry set))
19 (make-tree (entry set)
20 (adjoin-set x (left-branch set))
21 (right-branch set)))
22 ((> x (entry set))
23 (make-tree (entry set)
24 (left-branch set)
25 (adjoin-set x (right-branch set))))))
27 ;; Exercise 2.66. Implement the lookup procedure for the case where the set of records is structured as a binary tree, ordered by the numerical values of the keys.
29 (define (lookup given-key set-of-records)
30 (if (null? set-of-records)
31 #f
32 (let ((record (entry set-of-records))
33 (record-key (key record)))
34 (cond ((= given-key record-key)
35 record)
36 ((< given-key record-key)
37 (lookup given-key (left-branch set-of-records)))
38 ((> given-key record-key)
39 (lookup given-key (right-branch set-of-records)))))))