@@ -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