Skip to content

Commit e18c88f

Browse files
committed
GENERALIZEDARRAYS: fix bug and improve proposed interval-intersect
1 parent 8b209cc commit e18c88f

File tree

1 file changed

+14
-10
lines changed

1 file changed

+14
-10
lines changed

modules/generalized-arrays/generalized-arrays.scm

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -583,10 +583,11 @@ OTHER DEALINGS IN THE SOFTWARE.
583583
(%%interval-volume interval))))
584584

585585
(define (%%interval= interval1 interval2)
586-
(and (equal? (%%interval-upper-bounds interval1)
587-
(%%interval-upper-bounds interval2))
588-
(equal? (%%interval-lower-bounds interval1)
589-
(%%interval-lower-bounds interval2))))
586+
(or (eq? interval1 interval2)
587+
(and (equal? (%%interval-upper-bounds interval1)
588+
(%%interval-upper-bounds interval2))
589+
(equal? (%%interval-lower-bounds interval1)
590+
(%%interval-lower-bounds interval2)))))
590591

591592
(define (interval= interval1 interval2)
592593
(cond ((not (and (interval? interval1)
@@ -642,19 +643,22 @@ OTHER DEALINGS IN THE SOFTWARE.
642643
;; boolean `or` and `and` special forms) TBD: specilise say four
643644
;; arguments or so.
644645
((x) (check-interval+ x) x)
645-
((a b)
646-
(cond
647-
((eq? a b) (check-interval+ a) a)
648-
((interval= a b) a)
649-
(else (%%interval-intersect a b))))
650646
((a b . rest)
651647
(do ((a (check-interval+ a) i)
652648
(b b (car rest))
653649
(rest rest (cdr rest))
654650
(i (cond
655651
((eq? a b) a)
656652
((interval= a b) (check-interval+ a) a)
657-
(else (%%interval-intersect a b)))))
653+
((= (%%interval-dimension a) (%%interval-dimension b))
654+
(let ((r (%%interval-intersect (list a b))))
655+
(cond
656+
((not r))
657+
((equal? a r) a) ;; equivalent to %%interval=
658+
((equal? b r) b)
659+
(else r))))
660+
(else
661+
(error "interval-intersect: Not all arguments have the same dimension: " a b)))))
658662
((or (not i) (null? rest))
659663
i))))))
660664

0 commit comments

Comments
 (0)