diff --git a/src/util-bst.scm b/src/util-bst.scm index 3d67f74..9878014 100644 --- a/src/util-bst.scm +++ b/src/util-bst.scm @@ -29,8 +29,8 @@ bst-find-pair bst-filter-pairs - ;; bst-map-list - ;; bst-map-dict + bst-map-list + bst-map-dict util-bst-tests! ) @@ -312,7 +312,27 @@ (lambda (kv) (when (pred? (car kv) (cdr kv)) (set! res (cons kv res))))) - res)) + (reverse res))) + + (define/doc (bst-map-list bst proc) + ("Returns arbitrary list created by mapping all elements.") + (let ((res '())) + (bst-iter-kv bst + (lambda (kv) + (set! res + (cons res + (proc (car kv) (cdr kv)))))) + (reverse res))) + + (define/doc (bst-map-dict bst proc) + ("Returns a new dictionary with all values processed (keys are left intact).") + (set-bst-root bst + (let loop ((n (bst-root bst))) + (if n + (cons (cons (caar n) (proc (caar n) (cdar n))) + (cons (loop (cadr n)) + (loop (cddr n)))) + #f)))) ;; Module self-tests (define (util-bst-tests!)