Finding and filtering pairs.

This commit is contained in:
Dominik Pantůček 2023-07-07 09:53:45 +02:00
parent 901d2f7398
commit 19c40c18a6

View file

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