Finish preliminary BST reimplementation.

This commit is contained in:
Dominik Pantůček 2023-07-07 09:58:04 +02:00
parent 19c40c18a6
commit 6999664aa1

View file

@ -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!)