Exercise 3.25. Generalizing one- and two-dimensional tables, show how to implement a table in which values are stored under an arbitrary number of keys and different values may be stored under different numbers of keys. The lookup and insert! procedures should take as input a list of keys used to access the table. ———————————————————————————————————————————————————————————————————————— (define (make-table) (list '*table*)) (define (assoc key records) (cond ((null? records) #f) ((equal? key (caar records)) (car records)) (else (assoc key (cdr records))))) (define (lookup table path) (if (null? path) table (let ((x (assoc (car path) (cdr table)))) (if x (lookup x (cdr path)) x)))) (define (insert! table path value) (if (null? path) (set-cdr! table value) (let ((x (assoc (car path) (cdr table)))) (if x (insert! x (cdr path) value) (begin (set-cdr! table (cons (list (car path)) (cdr table))) (insert! (cadr table) (cdr path) value))))))