素人くさいSICP勉強会#20レポート
This article was migrated from http://rai
素人くさいSICP読書会に参加してきました。
ここのところ数回続けて参加できていなかったので、参加できて良かったです。
参加者数は、だいたい15名前後でした。今までと同様、演習問題を黙々と解いていくという形式で進められました。今回の範囲は、演習問題 2.9〜2.11でした。 間が空いていたので、前回までに進んだところを追いかけながら進めました。
途中、IntervalのWidthが減る事があるかどうか、という議論がありましたが、Widthは誤差のようなものなので、演算の結果として減る事は無いですね。
ということで、今回使ったコードを置いておきます(ちゃんと検証してないから書き間違いがあるかも)
;;7/5 (define (make-interval a b) (cons a b)) (define (lower-boun d x) (car x)) (define (upper-boun d x) (cdr x)) (define (add-interv al x y) (make-inter val (+ (lower-boun d x) (lower-boun d y)) (+ (upper-boun d x) (upper-boun d y)))) (define (mul-interv al x y) (let ((p1 *1 (lower-boun d y))) (p2 *2 (upper-boun d y))) (p3 *3 (lower-boun d y))) (p4 *4 (upper-boun d y)))) (make-inter val (min p1 p2 p3 p4) (max p1 p2 p3 p4)))) (define (div-interv al x y) (mul-interv al x (make-inter val (/ 1.0 (upper-boun d y)) (/ 1.0 (lower-boun d y))))) ;; ex 2.8 (define (sub-interv al x y) (make-inter val (- (lower-boun d x) (upper-boun d y)) (- (upper-boun d x) (lower-boun d y)))) ;; ex 2.10 (define (div-interv al-2 x y) (if (and (>= (upper-boun d y) 0) (<= (lower-bound y) 0)) (display "error: divider is spanning zero.") (div-interval x y))) ;; ex 2.11 (define (mul-interval-2 x y) (define (pp-pp-mul s t) (make-interval *5 (lower-bound t)) *6 (upper-bound t)))) (define (pp-mm-mul s t) (make-interval *7 (lower-bound t)) *8 (upper-bound t)))) (define (pp-pm-mul s t) (make-interval *9 (lower-bound t)) *10 (upper-bound t)))) (define (mm-mm-mul s t) (make-interval *11 (upper-bound t)) *12 (lower-bound t)))) (define (mm-pm-mul s t) (make-interval *13 (upper-bound t)) *14 (lower-bound t)))) (define (mm-pp-mul s t) (pp-mm-mul t s)) (define (pm-pp-mul s t) (pp-pm-mul t s)) (define (pm-mm-mul s t) (mm-pm-mul t s)) (define (pm-pm-mul s t) (make-interval (min *15 (lower-bound t)) *16 (upper-bound t))) (max *17 (lower-bound t)) *18 (upper-bound t))))) (define (pp s) (> (lower-bound s) 0)) (define (mm s) (< (upper-boun d s) 0)) (define (pm s) (not (or (pp s) (mm s)))) (cond ((and (pp x) (pp y)) (pp-pp-mul x y)) ((and (pp x) (mm y)) (pp-mm-mul x y)) ((and (pp x) (pm y)) (pp-pm-mul x y)) ((and (mm x) (pp y)) (mm-pp-mul x y)) ((and (mm x) (mm y)) (mm-mm-mul x y)) ((and (mm x) (pm y)) (mm-pm-mul x y)) ((and (pm x) (pp y)) (pm-pp-mul x y)) ((and (pm x) (mm y)) (pm-mm-mul x y)) ((and (pm x) (pm y)) (pm-pm-mul x y))))
This article was migrated from http://rai
1 (lower-boun
d x 2 (lower-boun
d x 3 (upper-boun
d x 4 (upper-boun
d x 5 (lower-boun
d s 6 (upper-boun
d s 7 (upper-boun
d s 8 (lower-boun
d s 9 (upper-boun
d s 10 (upper-boun
d s 11 (upper-boun
d s 12 (lower-boun
d s 13 (lower-boun
d s 14 (lower-boun
d s 15 (upper-boun
d s 16 (lower-boun
d s 17 (lower-boun
d s 18 (upper-boun
d s