1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-12 06:41:13 +02:00

Optimize `vhash-delete'.

* module/ice-9/vlist.scm (vhash-delete): Check whether KEY is in VHASH
  and return VHASH if it's not.
This commit is contained in:
Ludovic Courtès 2011-02-22 00:08:39 +01:00
parent 8bc5b79df7
commit 2a39def1a8

View file

@ -530,14 +530,16 @@ value of @var{result} for the first call to @var{proc}."
(define* (vhash-delete key vhash #:optional (equal? equal?) (hash hash)) (define* (vhash-delete key vhash #:optional (equal? equal?) (hash hash))
"Remove all associations from @var{vhash} with @var{key}, comparing keys "Remove all associations from @var{vhash} with @var{key}, comparing keys
with @var{equal?}." with @var{equal?}."
(vlist-fold (lambda (k+v result) (if (vhash-assoc key vhash equal? hash)
(let ((k (car k+v)) (vlist-fold (lambda (k+v result)
(v (cdr k+v))) (let ((k (car k+v))
(if (equal? k key) (v (cdr k+v)))
result (if (equal? k key)
(vhash-cons k v result)))) result
vlist-null (vhash-cons k v result))))
vhash)) vlist-null
vhash)
vhash))
(define vhash-delq (cut vhash-delete <> <> eq? hashq)) (define vhash-delq (cut vhash-delete <> <> eq? hashq))
(define vhash-delv (cut vhash-delete <> <> eqv? hashv)) (define vhash-delv (cut vhash-delete <> <> eqv? hashv))