SICP 习题2.9 区间宽度

来源:互联网 发布:网络运营商 编辑:程序博客网 时间:2024/05/29 11:56

可以看出add和sub之后的区间是之前两个区间的区间宽度之和,而mul和div是不确定的。

(define (add-interval x y)  (make-interval (+ (lower-bound x) (lower-bound y))         (+ (upper-bound x) (upper-bound y))))(define (mul-interval x y)  (let ((p1 (* (lower-bound x) (lower-bound y)))    (p2 (* (lower-bound x) (upper-bound y)))    (p3 (* (upper-bound x) (lower-bound y)))    (p4 (* (upper-bound x) (upper-bound y))))    (make-interval (min p1 p2 p3 p4)           (max p1 p2 p3 p4))))(define (div-interval x y)  (mul-interval x         (make-interval (/ 1.0 (lower-bound y))                   (/ 1.0 (upper-bound y)))))(define (sub-interval x y)  (make-interval (- (lower-bound x) (upper-bound y))         (- (upper-bound x) (lower-bound y))))(define (width-interval z)  (/ (- (upper-bound z) (lower-bound z)) 2.0))(define make-interval cons)(define lower-bound car)(define upper-bound cdr)(define print-interval  (lambda (z)    (newline)    (display (lower-bound z))    (display " ~ ")    (display (upper-bound z))))(define a (make-interval 1 2))(define b (make-interval 3 4))(newline)(display "a : ")(display (width-interval a))(newline)(display "b : ")(display (width-interval b))(print-interval (add-interval a b))(newline)(display "add : ")(display (width-interval (add-interval a b)))(print-interval (mul-interval a b))(newline)(display "mul : ")(display (width-interval (mul-interval a b)))(print-interval (div-interval a b))(newline)(display "div : ")(display (width-interval (div-interval a b)))(print-interval (sub-interval a b))(newline)(display "sub : ")(display (width-interval (sub-interval a b)))
0 0