# 2.10

## 练习 2.10 Ben Bitdiddle 是个专业程序员，他看了 Alyssa 工作后评论说，除以一个跨过横跨0的区间的意义不清楚。请修改 Alyssa 的代码，检查这种情况并在出现这一错误时报错。

(define (make-interval a b) (cons a b))
(define upper-bound cdr)
(define lower-bound car)
(define (add-interval x y)
(make-interval (+ (lower-bound x) (lower-bound y))
(+ (upper-bound x) (upper-bound y))))
(define (sub-interval x y) (add-interval x (make-interval (- 0 (upper-bound y)) (- 0 (lower-bound y)))))
(define (subtract-interval x y)
(define p1 (- (lower-bound x) (lower-bound y)))
(define p2 (- (lower-bound x) (upper-bound y)))
(define p3 (- (upper-bound x) (lower-bound y)))
(define p4 (- (upper-bound x) (upper-bound y)))

(make-interval (min p1 p2 p3 p4) (max p1 p2 p3 p4)))

(define (mul-interval x y)
(define p1 (* (lower-bound x) (lower-bound y)))
(define p2 (* (lower-bound x) (upper-bound y)))
(define p3 (* (upper-bound x) (lower-bound y)))
(define p4 (* (upper-bound x) (upper-bound y)))

(make-interval (min p1 p2 p3 p4) (max p1 p2 p3 p4))
)

(define (width x) (/ (- (upper-bound x) (lower-bound x)) 2))
(define int1 (make-interval 1 2))
(define int2 (make-interval 1 2))

(define (div-interval x y)
(if (<= (* (lower-bound y) (upper-bound y)) 0) "Not allowed!"
(mul-interval x
(make-interval (/ 1.0 (upper-bound y))
(/ 1.0 (lower-bound y))))))

(define x (make-interval 2 4))
(define y (make-interval 1 2))
(define z (make-interval -1 1))

(div-interval x y)

(div-interval x z)