Blame


1 665c255d 2023-08-04 jrmu (define (add-interval x y)
2 665c255d 2023-08-04 jrmu (make-interval (+ (lower-bound x) (lower-bound y))
3 665c255d 2023-08-04 jrmu (+ (upper-bound x) (upper-bound y))))
4 665c255d 2023-08-04 jrmu (define (mul-interval x y)
5 665c255d 2023-08-04 jrmu (let ((p1 (* (lower-bound x) (lower-bound y)))
6 665c255d 2023-08-04 jrmu (p2 (* (lower-bound x) (upper-bound y)))
7 665c255d 2023-08-04 jrmu (p3 (* (upper-bound x) (lower-bound y)))
8 665c255d 2023-08-04 jrmu (p4 (* (upper-bound x) (upper-bound y))))
9 665c255d 2023-08-04 jrmu (make-interval (min p1 p2 p3 p4)
10 665c255d 2023-08-04 jrmu (max p1 p2 p3 p4))))
11 665c255d 2023-08-04 jrmu
12 665c255d 2023-08-04 jrmu (define (div-interval x y)
13 665c255d 2023-08-04 jrmu (mul-interval x
14 665c255d 2023-08-04 jrmu (make-interval (/ 1.0 (upper-bound y))
15 665c255d 2023-08-04 jrmu (/ 1.0 (lower-bound y)))))
16 665c255d 2023-08-04 jrmu
17 665c255d 2023-08-04 jrmu (define (make-interval lower upper)
18 665c255d 2023-08-04 jrmu (cons lower upper))
19 665c255d 2023-08-04 jrmu (define (upper-bound interval)
20 665c255d 2023-08-04 jrmu (cdr interval))
21 665c255d 2023-08-04 jrmu (define (lower-bound interval)
22 665c255d 2023-08-04 jrmu (car interval))
23 665c255d 2023-08-04 jrmu
24 665c255d 2023-08-04 jrmu (define (sub-interval x y)
25 665c255d 2023-08-04 jrmu (make-interval (- (lower-bound x) (upper-bound y))
26 665c255d 2023-08-04 jrmu (- (upper-bound x) (lower-bound y))))
27 665c255d 2023-08-04 jrmu
28 665c255d 2023-08-04 jrmu
29 665c255d 2023-08-04 jrmu ;; Exercise 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.
30 665c255d 2023-08-04 jrmu
31 665c255d 2023-08-04 jrmu (define (div-interval x y)
32 665c255d 2023-08-04 jrmu (define (spans-zero? interval)
33 665c255d 2023-08-04 jrmu (and (<= (lower-bound interval) 0)
34 665c255d 2023-08-04 jrmu (<= 0 (upper-bound interval))))
35 665c255d 2023-08-04 jrmu (if (spans-zero? y)
36 665c255d 2023-08-04 jrmu (error "Division by zero")
37 665c255d 2023-08-04 jrmu (mul-interval x
38 665c255d 2023-08-04 jrmu (make-interval (/ 1.0 (upper-bound y))
39 665c255d 2023-08-04 jrmu (/ 1.0 (lower-bound y))))))