summaryrefslogtreecommitdiff
path: root/coding-exercises/2/66.rkt
blob: 7cfedb88d7bdd4ce9f6b6baefe1dcacb61f2bd17 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#lang racket
(require "../../shared/sets.rkt")

;; just use id as key
(define (key x)
  (if (number? x)
    x
    (error "Only supports numericals that we can compare with >, <, = -- KEY")))

(define (list-lookup given-key set-of-records)
  (cond ((null? set-of-records) false)
        ((equal? given-key (key (car set-of-records)))
         (car set-of-records))
        (else (list-lookup given-key (cdr set-of-records)))))

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

((lambda ()
  (println "list -- LOOKUP")
  (println (list-lookup 5 (list 1 2 3 4 5)))
  (newline)
  (println "tree -- UNION")
  (define test216a (make-entry
                     7
                     '()
                     '()))
  (define test216b (make-entry
                     4
                     (make-entry 1 '() '())
                     (make-entry
                       8
                       (make-entry 6 '() '())
                       (make-entry
                         10
                         '()
                         (make-entry
                                       12
                                       '()
                                       '())))))
  (println (lookup 10
                   (union-set
                     (list->tree (tree->list test216a))
                     (list->tree (tree->list test216b)))))
  (newline)))