Sunday, July 26, 2009

Ex-3.25

(define (make-table) (list '*table*))

(define (insert! value table . keys)
(if (not (null? keys))
(let ((record (assoc (car keys) (cdr table))))
(if (not record)
(begin
(set! record (cons (car keys) nil))
(set-cdr! table (cons record (cdr table)))))
(if (null? (cdr keys))
(set-cdr! record value)
(apply insert!
(cons value
(cons record (cdr keys))))))))

(define (lookup table . keys)
(if (null? keys) #f
(let ((record (assoc (car keys) (cdr table))))
(if record
(if (null? (cdr keys))
(cdr record)
(apply lookup (cons record (cdr keys))))
#f))))

No comments:

Post a Comment