]> git.rkrishnan.org Git - sicp.git/blob - src/sicp/ch3_3_3_2d.rkt
Solution to 4.33. This had been difficult to get right, though conceptually it was
[sicp.git] / src / sicp / ch3_3_3_2d.rkt
1 #lang r5rs
2
3 (define (lookup key-1 key-2 table)
4   (let ((subtable (assoc key-1 (cdr table))))
5     (if subtable
6         (let ((record (assoc key-2 (cdr subtable))))
7           (if record
8               (cdr record)
9               #f))
10         #f)))
11
12 (define (insert! key-1 key-2 value table)
13   (let ((subtable (assoc key-1 (cdr table))))
14     (if subtable
15         (let ((record (assoc key-2 (cdr subtable))))
16           (if record
17               (set-cdr! record value)
18               (set-cdr! subtable
19                         (cons (cons key-2 value)
20                               (cdr subtable)))))
21         (set-cdr! table
22                   (cons (list key-1
23                               (cons key-2 value))
24                         (cdr table)))))
25   'ok)