Fix functional updates.

This commit is contained in:
Dominik Pantůček 2023-07-07 10:48:32 +02:00
parent 3f6c5cc36a
commit f3bcfcaa6a
2 changed files with 9 additions and 3 deletions

View file

@ -116,7 +116,7 @@
(lambda (acc id mr) (lambda (acc id mr)
(cons (cons id mr) acc)) (cons (cons id mr) acc))
mb1))) mb1)))
(list->bdict (sort mb (lambda (a b) (< (car a) (car b)))))))))))) (list->bdict mb))))))))
;; Predicate ;; Predicate
(define (mbase? v) (define (mbase? v)

View file

@ -363,8 +363,14 @@
(values (set-bst-node-value n (proc (bst-node-value n))) (values (set-bst-node-value n (proc (bst-node-value n)))
0) 0)
(if (<? k nk) (if (<? k nk)
(loop (bst-node-left n)) (let-values (((new-left-node add-count)
(loop (bst-node-right n))))) (loop (bst-node-left n))))
(values (set-bst-node-left n new-left-node)
add-count))
(let-values (((new-right-node add-count)
(loop (bst-node-right n))))
(values (set-bst-node-right n new-right-node)
add-count)))))
(values (make-bst-node k (proc v)) 1))))) (values (make-bst-node k (proc v)) 1)))))
(set-bst-root+count bst (set-bst-root+count bst
new-root new-root