計算機程序的構造和解釋 練習題2.66

用一個序對錶示每一條記錄。

#lang racket

(define (entry tree) (car tree))
(define (left-branch tree) (cadr tree))
(define (right-branch tree) (caddr tree))
(define (make-tree entry left right)
  (list entry left right))

(define (make-record key record)
  (cons key record))
(define (key set)
  (car set))
(define (record set)
  (cdr set))

(define (lookup given-key set-of-records)
  (if(null? set-of-records) false
     (let ((x1 (key (entry set-of-records)))
           (x2 given-key))
       (cond ((= x1 x2) (entry set-of-records))
             ((> x1 x2)
              (lookup x2 (left-branch set-of-records)))
             ((< x1 x2)
              (lookup x2 (right-branch set-of-records)))))))

(define a (make-tree (make-record 5 '(five))
                     (make-tree (make-record 2 '(two))
                                (make-tree (make-record 1 '(one)) null null)
                                (make-tree (make-record 3 '(three)) null null))
                     (make-tree (make-record 7 '(seven))
                                null 
                                (make-tree (make-record 11 '(eleven)) null null))))
(lookup 3 a)

運行結果

'(3 three)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章