diff options
| author | 2025-02-16 20:52:57 -0500 | |
|---|---|---|
| committer | 2025-02-16 20:52:57 -0500 | |
| commit | b88f195069438f3f4a18c3295095ccd923390d81 (patch) | |
| tree | be12162e85828175d72456fa2407ea674ccbd7cf /mcgoron/weight-balanced-trees/internal.scm | |
| parent | use vectors instead of lists in srfi-113 tests (diff) | |
CHICKEN bug? Definition of `%insert` in the test for `internal` was
interfering with the import definition for the srfi-113 test.
Diffstat (limited to 'mcgoron/weight-balanced-trees/internal.scm')
| -rw-r--r-- | mcgoron/weight-balanced-trees/internal.scm | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/mcgoron/weight-balanced-trees/internal.scm b/mcgoron/weight-balanced-trees/internal.scm index 73bc00c..3a9ae63 100644 --- a/mcgoron/weight-balanced-trees/internal.scm +++ b/mcgoron/weight-balanced-trees/internal.scm @@ -112,16 +112,20 @@ ;;; Convert in-order vectors to ordered trees. ;;; ;;;;;;;;;;;;;;;;;;;;;;;;; -(: in-order-vector->node (vector --> node-type)) -(define (in-order-vector->node vec) +(: in-order-container->node ('a ('a fixnum -> *) fixnum --> node-type)) +(define (in-order-container->node container ref length) (define (divide left right) (if (< right left) '() (let ((midpoint (floor (/ (+ left right) 2)))) - (wb-tree-node (vector-ref vec midpoint) + (wb-tree-node (ref container midpoint) (divide left (- midpoint 1)) (divide (+ midpoint 1) right))))) - (divide 0 (- (vector-length vec) 1))) + (divide 0 (- length 1))) + +(: in-order-vector->node (vector --> node-type)) +(define (in-order-vector->node vec) + (in-order-container->node vec vector-ref (vector-length vec))) (: node->in-order-list (node-type --> list)) (define (node->in-order-list node) |
