fix for iset-prune! to return an empty iset instead of #f

This commit is contained in:
Alex Shinn 2012-06-24 23:20:00 -07:00
parent 100e5b7d1e
commit ef4372a2cd
2 changed files with 13 additions and 10 deletions

View file

@ -5,7 +5,7 @@
(define char-set:upper-case (immutable-char-set (%make-iset 65 90 #f #f #f)))
;; char-set:title-case
(define char-set:title-case (immutable-char-set #f))
(define char-set:title-case (immutable-char-set (%make-iset 0 0 0 #f #f)))
;; char-set:letter
(define char-set:letter (immutable-char-set (%make-iset 97 122 #f (%make-iset 65 90 #f #f #f) #f)))

View file

@ -133,24 +133,27 @@
(sparse 0 '()))))))
;; Remove empty nodes.
(define (iset-prune! iset)
(define (%iset-prune! is)
(cond
((not iset)
((not is)
#f)
(else
(iset-left-set! iset (iset-prune! (iset-left iset)))
(iset-right-set! iset (iset-prune! (iset-right iset)))
(if (and (eq? 0 (iset-bits iset))
(not (iset-left iset))
(not (iset-right iset)))
(iset-left-set! is (%iset-prune! (iset-left is)))
(iset-right-set! is (%iset-prune! (iset-right is)))
(if (and (eq? 0 (iset-bits is))
(not (iset-left is))
(not (iset-right is)))
#f
iset))))
is))))
(define (iset-prune! is)
(or (%iset-prune! is) (iset)))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(define (iset-optimize! is . opt)
(let ((span (if (pair? opt) (car opt) (* 40 8)))
(is (or (iset-prune! is) (iset))))
(is (iset-prune! is)))
(iset-for-each-node (lambda (node) (iset-optimize-node! node span)) is)
(iset-prune! is)))