parent
b116c2c98b
commit
0fcd217f2c
|
|
@ -0,0 +1,62 @@
|
||||||
|
(import srfi-1)
|
||||||
|
(import srfi-12)
|
||||||
|
(import matchable)
|
||||||
|
|
||||||
|
; Importing srfi-67 did not actually make available symbol-compare. Boo!
|
||||||
|
|
||||||
|
(define (symbol<? a b) (string<? (symbol->string a) (symbol->string b)))
|
||||||
|
|
||||||
|
; a BTree is a four-tuple of (name value left right) | ()
|
||||||
|
|
||||||
|
(define (btree-get key btree)
|
||||||
|
(match btree
|
||||||
|
(() (abort "Key not found."))
|
||||||
|
((k value left right)
|
||||||
|
(if (eq? key k)
|
||||||
|
value
|
||||||
|
(btree-get key (if (symbol<? key k) left right))))
|
||||||
|
(_ (abort "Not a BTree."))))
|
||||||
|
|
||||||
|
|
||||||
|
(define (btree-insert key value btree)
|
||||||
|
(match btree
|
||||||
|
(() (list key value '() '()))
|
||||||
|
((k v left right)
|
||||||
|
(if (eq? key k)
|
||||||
|
(list k value left right)
|
||||||
|
(if (symbol<? key k)
|
||||||
|
(list k v (btree-insert key value left) right)
|
||||||
|
(list k v left (btree-insert key value right)))))
|
||||||
|
(_ (abort "Not a BTree."))))
|
||||||
|
|
||||||
|
(set! T '())
|
||||||
|
(set! T (btree-insert 'larry 23 T))
|
||||||
|
(set! T (btree-insert 'barry 18 T))
|
||||||
|
(set! T (btree-insert 'carry 99 T))
|
||||||
|
(display T)
|
||||||
|
(newline)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
(define (balance el)
|
||||||
|
(if (null-list? el)
|
||||||
|
el
|
||||||
|
(balance0 el (halve (length el)))))
|
||||||
|
|
||||||
|
(define (balance0 el midpoint)
|
||||||
|
(receive (prefix suffix) (split-at el midpoint)
|
||||||
|
(cons
|
||||||
|
(first suffix)
|
||||||
|
(append
|
||||||
|
(balance prefix)
|
||||||
|
(balance (cdr suffix))))))
|
||||||
|
|
||||||
|
(define (halve n) (quotient n 2))
|
||||||
|
|
||||||
|
(set! T (iota 23))
|
||||||
|
|
||||||
|
;(define (btree-sorted-list items)
|
||||||
|
; (btree-sorted-list0 items (length items)))
|
||||||
|
|
||||||
|
;(define (btree-sorted-list items len)
|
||||||
|
; ())
|
||||||
|
|
@ -26,6 +26,7 @@
|
||||||
|
|
||||||
(import (chicken io))
|
(import (chicken io))
|
||||||
(import (chicken string))
|
(import (chicken string))
|
||||||
|
(import srfi-1)
|
||||||
(import srfi-12)
|
(import srfi-12)
|
||||||
(import srfi-69)
|
(import srfi-69)
|
||||||
(import matchable)
|
(import matchable)
|
||||||
|
|
@ -274,3 +275,21 @@
|
||||||
;(display (doit "1 2 true [4 5 false] loop <"))
|
;(display (doit "1 2 true [4 5 false] loop <"))
|
||||||
;(newline)
|
;(newline)
|
||||||
|
|
||||||
|
|
||||||
|
; Importing srfi-67 did not actually make available symbol-compare. Boo!
|
||||||
|
|
||||||
|
(define (symbol<? a b) (string<? (symbol->string a) (symbol->string b)))
|
||||||
|
|
||||||
|
; a BTree is a four-tuple of (name value left right) | ()
|
||||||
|
|
||||||
|
(define (btree-get key btree)
|
||||||
|
(match btree
|
||||||
|
(() (abort "Key not found."))
|
||||||
|
((k value left right)
|
||||||
|
(if (eq? key k)
|
||||||
|
value
|
||||||
|
(btree-get key (if (symbol<? key k) left right))))
|
||||||
|
(_ (abort "Not a BTree."))))
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue