diff --git a/src/util-dict-bst.scm b/src/util-dict-bst.scm index 7f74df7..8d86c35 100644 --- a/src/util-dict-bst.scm +++ b/src/util-dict-bst.scm @@ -51,6 +51,10 @@ bdict-values bdict-balance + + bdict-filter-pairs + bdict-filter-keys + bdict-filter-values bdict-tests! ) @@ -270,9 +274,38 @@ (vector->bdict (bdict->vector d))) - ;; Returns a list - (define (bdict-filter d p) - '()) + ;; Returns a list of key-value pairs matching predicate + (define (bdict-filter-pairs d p) + (bdict-reduce + '() + (lambda (a k v) + (let ((e (p k v))) + (if e + (cons (cons k v) a) + a))) + d)) + + ;; Returns a list of keys pairs matching predicate + (define (bdict-filter-keys d p) + (bdict-reduce + '() + (lambda (a k v) + (let ((e (p k v))) + (if e + (cons k a) + a))) + d)) + + ;; Returns a list of keys pairs matching predicate + (define (bdict-filter-values d p) + (bdict-reduce + '() + (lambda (a k v) + (let ((e (p k v))) + (if e + (cons v a) + a))) + d)) ;; Performs module self-tests (define (bdict-tests!)