3 (define (make-entry k v) (cons k v))
4 (define (key entry) (car entry))
5 (define (value entry) (cdr entry))
6 (define (set-key! entry k) (set-car! entry k))
7 (define (set-value! entry v) (set-cdr! entry v))
8 (define (null-entry? e)
14 ;(define (set-entry! k v e)
18 (define (make-node entry left right)
19 (cons entry (cons left (cons right '()))))
21 (define (entry-node node) (car node))
22 (define (left-node node) (car (cdr node)))
23 (define (right-node node) (car (cdr (cdr node))))
26 (make-node (make-entry '() '()) '() '()))
28 (define (entry-tree tree)
31 (define (left-branch tree)
34 (define (right-branch tree)
37 (define (set-left-branch! tree val)
38 (set-car! (cdr tree) val))
40 (define (set-right-branch! tree val)
41 (set-car! (cdr (cdr tree)) val))
43 (define (set-entry! tree entry)
44 (set-car! tree entry))
46 (define (make-tree-node k v)
47 (make-node (make-entry k v) '() '()))
49 (define (lookup k table)
50 (let ((e (entry-tree table)))
53 ((= k (key e)) (value e))
54 ((< k (key e)) (lookup k (left-branch table)))
55 ((> k (key e)) (lookup k (right-branch table))))))
57 (define (insert! k v table)
59 ((null-entry? (entry-tree table)) (set-entry! table (make-entry k v)))
60 ((= k (key (entry-tree table))) (set-value! (entry-tree table) v))
61 ((< k (key (entry-tree table)))
62 (if (null? (left-branch table))
63 (set-left-branch! table (make-tree-node k v))
64 (insert! k v (left-branch table))))
65 ((> k (key (entry-tree table)))
66 (if (null? (right-branch table))
67 (set-right-branch! table (make-tree-node k v))
68 (insert! k v (right-branch table)))))