第二章 构造数据抽象
2.1 数据抽象引导
EX 2.7
1 2 3 4 5 6 7
| (define (upper-bound x) (cdr x))
(define (lower-bound x) (car x))
(define (make-interval a b) (cons a b))
(define test (make-interval 1 2))
|
EX 2.8
1 2 3
| (define (sub-interval x y) (make-interval (- (lower-bound x) (lower-bound y)) (- (upper-bound x) (upper-bound y))))
|
EX 2.9
显而易见,若两个区间分别为(1,2) (3,4),被加宽度为0.5
对于加:(4,6),宽度为0.5+0.5=1
对于减:(-2,-2),宽度为0.5-0.5=0
对于乘:p1=3 p2=4 p3=6 p4=8,(3,8), 宽度为2.5
对于除:第一个区间乘上第二个区间的倒数,p1=1/4 p2=1/3 p3=1/2 p4=2/3,(1/4,2/3),宽度为5/24
EX 2.10
显然,如果两个区间分别为(0,1),(1,2)
对于除:取倒数的时候可能会出现分母为0的情况
如果区间横跨0,区间取倒数的时候会出现上界小于下界的情况,(-1,2)取倒数后(1/2, -1)
1 2 3 4 5 6 7 8 9
| (define (new-div-interval x y) (let ((y1 (lower-bound y)) (y2 (upper-bound y))) (cond ((or (= y1 0) (= y2 0)) (display "error")) ((< y1 0) (display "error")) (else (mul-interval x (make-interval (/ 1.0 y1) (/ 1.0 y2)))))))
|