zoukankan      html  css  js  c++  java
  • SICP_2.66

     1 #lang racket
     2 
     3 ;;;;;;;;;;;;;;;;;;;2.66
     4 (define (lookup given-key set-of-records)
     5   (cond ((null? set-of-records) false)
     6         ((= given-key (key (car set-of-records)))
     7          (car set-of-records))
     8         ((< given-key (key (car set-of-records)))
     9          (lookup given-key (left-branch set-of-records)))
    10         ((> given-key (key (car set-of-records)))
    11          (lookup given-key (right-branch set-of-records)))))
    12 
    13 ;;;;;;;;;;;;;;;;;;;;
    14 (define (list->tree elements)
    15   (car (partial-tree elements (length elements))))
    16 
    17 (define (partial-tree elts n)
    18   (if (= n 0)
    19       (cons '() elts)
    20       (let ((left-size (quotient (- n 1) 2)))
    21         (let ((left-result (partial-tree elts left-size)))
    22           (let ((left-tree (car left-result))
    23                 (non-left-elts (cdr left-result))
    24                 (right-size (- n (+ left-size 1))))
    25             (let ((this-entry (car non-left-elts))
    26                   (right-result (partial-tree (cdr non-left-elts)
    27                                               right-size)))
    28               (let ((right-tree (car right-result))
    29                     (remaining-elts (cdr right-result)))
    30                 (cons (make-tree this-entry left-tree right-tree)
    31                       remaining-elts))))))))
    32 
    33 (define (key record) (car record))
    34 (define (data record) (cdr record))
    35 (define (make-record key data) (cons key data))
    36 ;;;;;;;;;;;;;;;;;;;;
    37 (define (entry tree) (car tree))
    38 
    39 (define (left-branch tree) (cadr tree))
    40 
    41 (define (right-branch tree) (caddr tree))
    42 
    43 (define (make-tree entry left right)
    44   (list entry left right))
    45 
    46 
    47 ;;;;;;;;;;;;;;;;;;;;
    48 
    49 (define record1 (make-record 3 '(yosoro 18 2017)))
    50 (define record2 (make-record 7 '(umi 12 2014)))
    51 (define record3 (make-record 4 '(nico 15 2088)))
    52 (define record4 (make-record 10 '(qika 11 2156)))
    53 (define record5 (make-record 11 '(maki 12 1998)))
    54 
    55 (define database
    56   (list record1 record2 record3 record4 record5))
    57 
    58 (define tree-database (list->tree database))
    59 
    60 ;;;;;;;;;;;;;;;;;;;test
    61 
    62 (lookup 3  tree-database)
    63 
    64 (lookup 10 tree-database)
    65 
    66 (lookup 6 tree-database)
    Yosoro
  • 相关阅读:
    iphone label相关的圆角处理(转)
    如何设置图片四个方向圆角属性
    iphone自动隐藏和显示工具栏和导航条
    重写系统黑色的TabBar
    awk正则表达式(转)
    AWK相关学习(转)
    C的 __FILE__, __LINE__的意思
    iphone UILabel 顶部对齐(top align)
    WPF笔记(4.5 MasterDetail数据绑定)——Data Binding
    CLR笔记:8.方法
  • 原文地址:https://www.cnblogs.com/tclan126/p/6498306.html
Copyright © 2011-2022 走看看