diff options
| author | 2025-02-15 19:00:50 -0500 | |
|---|---|---|
| committer | 2025-02-15 19:00:50 -0500 | |
| commit | 3caad6d9f1098b2a9d6e5d016b883d855491ae05 (patch) | |
| tree | 4f46106f9df00c228ecd72e3a3095f4144265181 /mcgoron | |
| parent | add node->generator (diff) | |
generator->node
Diffstat (limited to 'mcgoron')
| -rw-r--r-- | mcgoron/weight-balanced-trees/internal.scm | 26 | ||||
| -rw-r--r-- | mcgoron/weight-balanced-trees/internal.sld | 2 |
2 files changed, 13 insertions, 15 deletions
diff --git a/mcgoron/weight-balanced-trees/internal.scm b/mcgoron/weight-balanced-trees/internal.scm index 9b9fdd1..ffbe6b4 100644 --- a/mcgoron/weight-balanced-trees/internal.scm +++ b/mcgoron/weight-balanced-trees/internal.scm @@ -435,17 +435,15 @@ (loop (insert comparator node value)))))) (define (node->in-order-generator node) - (if (null? node) - eof-object - (let ((queue (list-queue))) - (define (traverse-left! node) - (when (not (null? node)) - (list-queue-add-front! node) - (traverse-left! (get-left node)))) - (traverse-left! node) - (lambda () - (if (list-queue-empty? queue) - (eof-object) - (let ((current (list-queue-remove-front! queue))) - (traverse-left! (get-right current)) - (get-data current))))))) + (let ((queue (list-queue))) + (define (traverse-left! node) + (when (not (null? node)) + (list-queue-add-front! node) + (traverse-left! (get-left node)))) + (traverse-left! node) + (lambda () + (if (list-queue-empty? queue) + (eof-object) + (let ((current (list-queue-remove-front! queue))) + (traverse-left! (get-right current)) + (get-data current)))))) diff --git a/mcgoron/weight-balanced-trees/internal.sld b/mcgoron/weight-balanced-trees/internal.sld index 3839126..0676e81 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) + node->generator generator->node) (include "internal.scm")) |
