mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-12 14:50:19 +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?
|
transient-intset?
|
||||||
persistent-intset
|
persistent-intset
|
||||||
transient-intset
|
transient-intset
|
||||||
|
intset
|
||||||
intset-add
|
intset-add
|
||||||
intset-add!
|
intset-add!
|
||||||
intset-remove
|
intset-remove
|
||||||
|
@ -300,6 +301,11 @@
|
||||||
;; Add a new level and try again.
|
;; Add a new level and try again.
|
||||||
(intset-add (add-level min shift root) i))))))
|
(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 (intset-remove bs i)
|
||||||
(define (remove i shift root)
|
(define (remove i shift root)
|
||||||
(cond
|
(cond
|
||||||
|
|
|
@ -56,9 +56,10 @@
|
||||||
(persistent-intmap
|
(persistent-intmap
|
||||||
(intmap-fold (lambda (k v out)
|
(intmap-fold (lambda (k v out)
|
||||||
(let ((v* (f k v)))
|
(let ((v* (f k v)))
|
||||||
(if (equal? v v*)
|
(cond
|
||||||
out
|
((equal? v v*) out)
|
||||||
(intmap-replace! out k v*))))
|
(v* (intmap-replace! out k v*))
|
||||||
|
(else (intmap-remove out k)))))
|
||||||
conts
|
conts
|
||||||
conts)))
|
conts)))
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue