diff --git a/src/util-bst.scm b/src/util-bst.scm index 8ad2d57..3d67f74 100644 --- a/src/util-bst.scm +++ b/src/util-bst.scm @@ -26,8 +26,8 @@ bst-balance - ;; bst-find-pair - ;; bst-filter-pairs + bst-find-pair + bst-filter-pairs ;; bst-map-list ;; bst-map-dict @@ -240,8 +240,8 @@ ("Returns all the keys contained in given dictionary.") (let ((res '())) (bst-iter-kv bst - (lambda (k v) - (set! res (cons k res)))) + (lambda (kv) + (set! res (cons (car kv) res)))) (reverse res))) ;; Converts BST to KVV @@ -295,6 +295,25 @@ (kvv->bst (bst->kvv bst))) + (define/doc (bst-find-pair bst pred?) + ("Finds pair by predicate that accepts both key and value.") + (call/cc + (lambda (cc) + (bst-iter-kv bst + (lambda (kv) + (when (pred? (car kv) (cdr kv)) + (cc kv)))) + #f))) + + (define/doc (bst-filter-pairs bst pred?) + ("Returns a list of key-value pairs matching predicate.") + (let ((res '())) + (bst-iter-kv bst + (lambda (kv) + (when (pred? (car kv) (cdr kv)) + (set! res (cons kv res))))) + res)) + ;; Module self-tests (define (util-bst-tests!) (run-tests