1 (define false #f) 2 (define true #t) 3 4 (define (make-table) 5 (let ((local-table ‘())) 6 7 (define (make-tree key value left-branch right-branch) 8 (list (cons key value) left-branch right-branch)) 9 10 (define (record-key tree) 11 (caar tree)) 12 13 (define (record-value) 14 (cdar tree)) 15 16 (define (left-sub tree) 17 (cadr tree)) 18 19 (define (right-sub tree) 20 (caddr tree)) 21 22 (define (record tree) 23 (car tree)) 24 25 (define (lookup key) 26 (define (lookup-helper tree) 27 (if (null? tree) 28 false 29 (if (= (record-key tree) key) 30 (record-value tree) 31 (if (< (record-key tree) key) 32 (lookup-helper (left-sub tree)) 33 (lookup-helper (right-sub tree)))))) 34 (lookup-helper local-table)) 35 36 (define (insert! key value) 37 (define (insert-helper! tree) 38 (if (null? tree) 39 (set! tree (make-tree key value ‘() ‘())) 40 (if (= (record-key tree) key) 41 (set-cdr! (record tree) value) 42 (if (< (record-key tree) key) 43 (insert-helper! (left-sub tree)) 44 (insert-helper! (right-sub tree)))))) 45 (insert-helper! local-table) 46 ‘ok) 47 48 (define (print-table) 49 (display local-table) 50 (newline)) 51 52 (define (dispatch m) 53 (cond ((eq? m ‘print-table) print-table) 54 ((eq? m ‘insert!) insert!) 55 ((eq? m ‘lookup) lookup) 56 (else (error "Unknow operation --TABLE" m)))) 57 58 dispatch)) 59 60 (define t1 (make-table)) 61 ((t1 ‘print-table)) 62 ((t1 ‘lookup) 4) 63 ((t1 ‘insert!) 4 ‘lan) 64 ((t1 ‘insert!) 5 ‘tian) 65 ((t1 ‘print-table))
insert! 部分有问题明明set! 了 local-table 却没有什么效果,可能是我对环境模型的理解不够导致的。 参考
时间: 2024-10-17 09:15:37