1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-11 06:20:23 +02:00

Add "intset" syntax to construct intsets.

* module/language/cps/intset.scm (intset): New syntax.
This commit is contained in:
Andy Wingo 2015-06-01 19:58:23 +02:00
parent 8b4a523ad5
commit d78e5a260c
2 changed files with 10 additions and 3 deletions

View file

@ -34,6 +34,7 @@
transient-intset?
persistent-intset
transient-intset
intset
intset-add
intset-add!
intset-remove
@ -300,6 +301,11 @@
;; Add a new level and try again.
(intset-add (add-level min shift root) i))))))
(define-syntax intset
(syntax-rules ()
((intset) empty-intset)
((intset x x* ...) (intset-add (intset x* ...) x))))
(define (intset-remove bs i)
(define (remove i shift root)
(cond

View file

@ -56,9 +56,10 @@
(persistent-intmap
(intmap-fold (lambda (k v out)
(let ((v* (f k v)))
(if (equal? v v*)
out
(intmap-replace! out k v*))))
(cond
((equal? v v*) out)
(v* (intmap-replace! out k v*))
(else (intmap-remove out k)))))
conts
conts)))