Skip to content

2.10

; Ben Bitdiddle, an expert systems programmer, looks over Alyssa’s 
; shoulder and comments that it is not clear what it means to divide 
; by an interval that spans zero. Modify Alyssa’s code to check for 
; this condition and to signal an error if it occurs.

(define (make-interval a b) (cons a b))
(define (lower-bound z) (car z))
(define (upper-bound z) (cdr z))

; Check for spanning zero condition while dividing
(define (div-interval x y) 
    (if (<= (* (lower-bound y) (upper-bound y)) 0)
        (error "Cannot divide interval spanning zero") 
        (mul-interval
            x
            (make-interval (/ 1.0 (upper-bound y))
                            (/ 1.0 (lower-bound y))))))

; This will produce error
(div-interval 
    (make-interval 1 1.5) 
    (make-interval -0.5 0.5)) ;Cannot divide interval spanning zero