diff options
| author | 2025-02-15 19:08:42 -0500 | |
|---|---|---|
| committer | 2025-02-15 19:08:42 -0500 | |
| commit | a76207a6735f03e1ae5cb5746b38b6321a9c5788 (patch) | |
| tree | 132b2a10b4ab1092357cd1f13b3197bca52c969a /mcgoron | |
| parent | generator->node (diff) | |
node->in-order-generator
Diffstat (limited to 'mcgoron')
| -rw-r--r-- | mcgoron/weight-balanced-trees/internal.scm | 5 | ||||
| -rw-r--r-- | mcgoron/weight-balanced-trees/internal.sld | 2 |
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")) |
