aboutsummaryrefslogtreecommitdiffstats
path: root/mcgoron
diff options
context:
space:
mode:
authorGravatar Peter McGoron 2025-02-15 19:08:42 -0500
committerGravatar Peter McGoron 2025-02-15 19:08:42 -0500
commita76207a6735f03e1ae5cb5746b38b6321a9c5788 (patch)
tree132b2a10b4ab1092357cd1f13b3197bca52c969a /mcgoron
parentgenerator->node (diff)
node->in-order-generator
Diffstat (limited to 'mcgoron')
-rw-r--r--mcgoron/weight-balanced-trees/internal.scm5
-rw-r--r--mcgoron/weight-balanced-trees/internal.sld2
2 files changed, 5 insertions, 2 deletions
diff --git a/mcgoron/weight-balanced-trees/internal.scm b/mcgoron/weight-balanced-trees/internal.scm
index ffbe6b4..e479649 100644
--- a/mcgoron/weight-balanced-trees/internal.scm
+++ b/mcgoron/weight-balanced-trees/internal.scm
@@ -413,6 +413,7 @@
;;; Generators
;;; ;;;;;;;;;;;;;;;;;;;
+(: node->generator (node-type -> (-> *)))
(define (node->generator node)
(let ((queue (list-queue)))
(define (add-when-not-null! node)
@@ -427,6 +428,7 @@
(add-when-not-null! (get-right current-node))
(get-data current-node))))))
+(: generator->node (* (-> *) -> node-type))
(define (generator->node comparator gen)
(let loop ((node '()))
(let ((value (gen)))
@@ -434,11 +436,12 @@
node
(loop (insert comparator node value))))))
+(: node->in-order-generator (node-type -> (-> *)))
(define (node->in-order-generator node)
(let ((queue (list-queue)))
(define (traverse-left! node)
(when (not (null? node))
- (list-queue-add-front! node)
+ (list-queue-add-front! queue node)
(traverse-left! (get-left node))))
(traverse-left! node)
(lambda ()
diff --git a/mcgoron/weight-balanced-trees/internal.sld b/mcgoron/weight-balanced-trees/internal.sld
index 0676e81..930daf9 100644
--- a/mcgoron/weight-balanced-trees/internal.sld
+++ b/mcgoron/weight-balanced-trees/internal.sld
@@ -37,6 +37,6 @@
union intersection difference xor
update insert delete
every
- node->generator generator->node)
+ node->generator generator->node node->in-order-generator)
(include "internal.scm"))