;; The first three lines of this file were inserted by DrScheme. They record metadata ;; about the language level of this file in a form that our tools can easily process. #reader(lib "htdp-beginner-abbr-reader.ss" "lang")((modname bst) (read-case-sensitive #t) (teachpacks ((lib "world.ss" "teachpack" "htdp"))) (htdp-settings #(#t constructor repeating-decimal #f #t none #f ((lib "world.ss" "teachpack" "htdp"))))) ;; a person is: ;; (make-person number symbol) (define-struct person (ssn name)) ;; a db2 is either: ;; - false ;; - (make-db-node person db2 db2) (define-struct db-node (person left right)) ;; a db3 is either: ;; - false ;; - (make-db-node person[p] db3[l] db3[r]) ;; INVARIANT: each ssn in l is less than p's ssn ;; each ssn in r is greater than p's ssn (define example-db (make-db-node (make-person 9 'Luol) (make-db-node (make-person 1 'Derrick) false false) (make-db-node (make-person 24 'Tyrus) false false))) ;; lookup2 : db2 number -> person ;; to determine if a person with ssn `n' is in db2 (define (lookup2 db2 n) (cond [(boolean? db2) false] [else (or (= (person-ssn (db-node-person db2)) n) (lookup2 (db-node-left db2) n) (lookup2 (db-node-right db2) n))])) (check-expect (lookup2 false 1) false) (check-expect (lookup2 (make-db-node (make-person 1 'Suzie) false false) 1) true) (check-expect (lookup2 (make-db-node (make-person 1 'Suzie) false false) 6) false) (check-expect (lookup2 example-db 24) true) ;; lookup3 : db2 number -> person ;; to determine if a person with ssn `n' is in db2 (define (lookup3 db2 n) (cond [(boolean? db2) false] [else (cond [(= (person-ssn (db-node-person db2)) n) true] [(> (person-ssn (db-node-person db2)) n) (lookup3 (db-node-left db2) n)] [(< (person-ssn (db-node-person db2)) n) (lookup3 (db-node-right db2) n)])])) (check-expect (lookup3 false 1) false) (check-expect (lookup3 (make-db-node (make-person 1 'Suzie) false false) 1) true) (check-expect (lookup3 (make-db-node (make-person 1 'Suzie) false false) 6) false) (check-expect (lookup3 example-db 24) true) (check-expect (lookup3 example-db 1) true)