• SICP_3.26


     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 却没有什么效果,可能是我对环境模型的理解不够导致的。           参考

    Yosoro
  • 相关阅读:
    Window.ActiveXObject的用法 以及如何判断浏览器的类型
    PDO预处理
    *p=&a是把a的值赋给p,p=&a是把a的地址赋给p。
    牛客网
    关于stable_sort()和sort()的区别
    求最小公倍数
    成绩排序
    二叉树的存储、创建以及遍历
    关于sort函数的几种用法
    vector的用法
  • 原文地址:https://www.cnblogs.com/tclan126/p/6850959.html
Copyright © 2020-2023  润新知