--- /dev/null
+#lang r5rs
+
+(define (lookup key table)
+ (let ((record (assoc key (cdr table))))
+ (if record
+ (cdr record)
+ #f)))
+
+(define (assoc key records)
+ (cond
+ ((null? records) #f)
+ ((equal? key (car (car records))) (car records))
+ (else (assoc key (cdr records)))))
+
+(define (insert! key value table)
+ (let ((record (assoc key (cdr table))))
+ (if record
+ (set-cdr! record value)
+ (set-cdr! table
+ (cons (cons key value) (cdr table)))))
+ 'ok)
+
+(define (make-table)
+ (list '*table*))
--- /dev/null
+#lang r5rs
+
+(define (lookup key-1 key-2 table)
+ (let ((subtable (assoc key-1 (cdr table))))
+ (if subtable
+ (let ((record (assoc key-2 (cdr subtable))))
+ (if record
+ (cdr record)
+ #f))
+ #f)))
+
+(define (insert! key-1 key-2 value table)
+ (let ((subtable (assoc key-1 (cdr table))))
+ (if subtable
+ (let ((record (assoc key-2 (cdr subtable))))
+ (if record
+ (set-cdr! record value)
+ (set-cdr! subtable
+ (cons (cons key-2 value)
+ (cdr subtable)))))
+ (set-cdr! table
+ (cons (list key-1
+ (cons key-2 value))
+ (cdr table)))))
+ 'ok)
\ No newline at end of file
--- /dev/null
+#lang r5rs
+
+(define error display)
+
+(define (make-table)
+ (let ((local-table (list '*table*)))
+ (define (assoc key records)
+ (cond
+ ((null? records) #f)
+ ((equal? key (car (car records))) (car records))
+ (else (assoc key (cdr records)))))
+
+ (define (lookup key-1 key-2)
+ (let ((subtable (assoc key-1 (cdr local-table))))
+ (if subtable
+ (let ((record (assoc key-2 (cdr subtable))))
+ (if record
+ (cdr record)
+ #f))
+ #f)))
+ (define (insert! key-1 key-2 value)
+ (let ((subtable (assoc key-1 (cdr local-table))))
+ (if subtable
+ (let ((record (assoc key-2 (cdr subtable))))
+ (if record
+ (set-cdr! record value)
+ (set-cdr! subtable
+ (cons (cons key-2 value)
+ (cdr subtable)))))
+ (set-cdr! local-table
+ (cons (list key-1
+ (cons key-2 value))
+ (cdr local-table)))))
+ 'ok)
+ (define (dispatch m)
+ (cond
+ ((eq? m 'lookup-proc) lookup)
+ ((eq? m 'insert-proc!) insert!)
+ (else (error "Unknown operation -- TABLE"))))
+ dispatch))
+
+(define operation-table (make-table))
+(define get (operation-table 'lookup-proc))
+(define put (operation-table 'insert-proc!))
\ No newline at end of file