MIT OCW
Lecture 2B | MIT 6.001
本日の MIT ビデオは 2B の後半。
・抽象化レイヤ
・pair の pair を用いて、任意の大きさのデータブロックを定義できる
・cons/car/cdr を自前で用意
・データ的なものを関数を用いて表現する
問題解答
問2.11
(define (mul-interval x y) (cond ((< 0 (lower-bound x)) (make-interval (* (lower-bound x) (lower-bound y)) (* (upper-bound x) (upper-bound y))) ((= (lower-bound x) 0) (make-interval 0 (* (upper-bound x) (upper-bound y)))) ((< (lower-bound x) 0) (make-interval (* (lower-bound x) (upper-bound y)) (* (upper-bound x) (upper-bound y)))) ((= (upper-bound x) 0) (make-interval (* (lower-bound x) (upper-bound y)) 0)) ((< (upper-bound x) 0) (make-interval (* (lower-bound x) (upper-bound y)) (* (upper-bound x) (lower-bound y)))) ((= (lower-bound y) 0) (make-interval (* (lower-bound x) (upper-bound y)) 0)) ((< (lower-bound y) 0) (make-interval (* (lower-bound x) (upper-bound y)) (* (upper-bound x) (lower-bound y)))) ((= (lower-bound y) 0) (make-interval 0 (* (lower-bound x) (lower-bound y)))) ((= (lower-bound y) 0) (make-interval (* (upper-bound x) (lower-bound y)) (* (lower-bound x) (upper-bound y)))))))
9 つに場合分けすることはできたけれども、いずれかの値が 0 でない場合は常に二回乗算がおこなわれるような。。。?
→問題は"二回以上"だけど、正しくは"二回より多く"。また、場合分けの仕方がダメだった。
また、x と y の区間が被らない前提で考えてしまった。
本来なら xy それぞれについて
- 完全に負
- ゼロをまたぐ
- 完全に正
の、3×3通りについて考えないといけなかった。
問2.12
(define (make-center-percent v percent) (make-interval (* v (- 1.0 (/ percent 100.0))) (* v (+ 1.0 (/ percent 100.0))))) (define (center i) (/ (+ (lower-bound i) (upper-bound i)) 2)) (define (width i) (/ (- (upper-bound i) (lower-bound i)) 2)) (define (percent i) (* (/ (width i) (center i)) 100))
P54 は丸々問題なので時間がかかる。
それにしても、WordPress でタグを打ちながら記事を書くのがいい加減辛い、、、、
テーマも適当だし、いい加減もっと手軽なものに移行したい。