Finding and filtering pairs.
This commit is contained in:
parent
901d2f7398
commit
19c40c18a6
1 changed files with 23 additions and 4 deletions
|
@ -26,8 +26,8 @@
|
||||||
|
|
||||||
bst-balance
|
bst-balance
|
||||||
|
|
||||||
;; bst-find-pair
|
bst-find-pair
|
||||||
;; bst-filter-pairs
|
bst-filter-pairs
|
||||||
|
|
||||||
;; bst-map-list
|
;; bst-map-list
|
||||||
;; bst-map-dict
|
;; bst-map-dict
|
||||||
|
@ -240,8 +240,8 @@
|
||||||
("Returns all the keys contained in given dictionary.")
|
("Returns all the keys contained in given dictionary.")
|
||||||
(let ((res '()))
|
(let ((res '()))
|
||||||
(bst-iter-kv bst
|
(bst-iter-kv bst
|
||||||
(lambda (k v)
|
(lambda (kv)
|
||||||
(set! res (cons k res))))
|
(set! res (cons (car kv) res))))
|
||||||
(reverse res)))
|
(reverse res)))
|
||||||
|
|
||||||
;; Converts BST to KVV
|
;; Converts BST to KVV
|
||||||
|
@ -295,6 +295,25 @@
|
||||||
(kvv->bst
|
(kvv->bst
|
||||||
(bst->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
|
;; Module self-tests
|
||||||
(define (util-bst-tests!)
|
(define (util-bst-tests!)
|
||||||
(run-tests
|
(run-tests
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue