Blame


1 665c255d 2023-08-04 jrmu (define (list->tree elements)
2 665c255d 2023-08-04 jrmu (car (partial-tree elements (length elements))))
3 665c255d 2023-08-04 jrmu
4 665c255d 2023-08-04 jrmu (define (partial-tree elts n)
5 665c255d 2023-08-04 jrmu (if (= n 0)
6 665c255d 2023-08-04 jrmu (cons '() elts)
7 665c255d 2023-08-04 jrmu (let ((left-size (quotient (- n 1) 2)))
8 665c255d 2023-08-04 jrmu (let ((left-result (partial-tree elts left-size)))
9 665c255d 2023-08-04 jrmu (let ((left-tree (car left-result))
10 665c255d 2023-08-04 jrmu (non-left-elts (cdr left-result))
11 665c255d 2023-08-04 jrmu (right-size (- n (+ left-size 1))))
12 665c255d 2023-08-04 jrmu (let ((this-entry (car non-left-elts))
13 665c255d 2023-08-04 jrmu (right-result (partial-tree (cdr non-left-elts) right-size)))
14 665c255d 2023-08-04 jrmu (let ((right-tree (car right-result))
15 665c255d 2023-08-04 jrmu (remaining-elts (cdr right-result)))
16 665c255d 2023-08-04 jrmu (cons (make-tree this-entry left-tree right-tree)
17 665c255d 2023-08-04 jrmu remaining-elts))))))))