diff options
| author | 2025-02-16 20:52:57 -0500 | |
|---|---|---|
| committer | 2025-02-16 20:52:57 -0500 | |
| commit | b88f195069438f3f4a18c3295095ccd923390d81 (patch) | |
| tree | be12162e85828175d72456fa2407ea674ccbd7cf /mcgoron | |
| 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 '')
| -rw-r--r-- | mcgoron/weight-balanced-trees/internal.scm | 12 | ||||
| -rw-r--r-- | mcgoron/weight-balanced-trees/internal.sld | 2 | ||||
| -rw-r--r-- | mcgoron/weight-balanced-trees/srfi/113/sets.scm | 4 |
3 files changed, 13 insertions, 5 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) diff --git a/mcgoron/weight-balanced-trees/internal.sld b/mcgoron/weight-balanced-trees/internal.sld index f9bf4ac..42ad1fc 100644 --- a/mcgoron/weight-balanced-trees/internal.sld +++ b/mcgoron/weight-balanced-trees/internal.sld @@ -31,7 +31,7 @@ with-node get-data get-left get-right get-size balanced? - in-order-vector->node + in-order-vector->node in-order-container->node node->in-order-list join join2 split search diff --git a/mcgoron/weight-balanced-trees/srfi/113/sets.scm b/mcgoron/weight-balanced-trees/srfi/113/sets.scm index 7c31ece..5b456b1 100644 --- a/mcgoron/weight-balanced-trees/srfi/113/sets.scm +++ b/mcgoron/weight-balanced-trees/srfi/113/sets.scm @@ -356,6 +356,10 @@ (define (set->reverse-order-generator set) (node->reverse-order-generator (get-node set))) +(define (in-order->set comparator container ref length) + (raw-set comparator + (in-order-container->node container ref length))) + (define compatible-sets? (apply-nary-predicate (lambda (cmp s1 s2) |
