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:
parent
8b4a523ad5
commit
d78e5a260c
2 changed files with 10 additions and 3 deletions
|
@ -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
|
||||
|
|
|
@ -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)))
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue