用一個序對錶示每一條記錄。
#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)