SICP

SICP を読んでみる #37 MIT OCW 2B/第二章 p.53

MIT OCW

Lecture 2B | MIT 6.001
本日の MIT ビデオは 2B の前半。 pair を使って有理数を定義したり、演算をしたり。

pair
car
cdr
抽象レイヤ
約分のタイミングを例に、システムのデザインの話

問題解答

問2.9
区間を値 v と w で表して、それを演算するという話。
区間 x1 と x2 があって、その差の区間は

下限 : (v2-w2) – (v1+w1)
上限 : (v2+w2) – (v1-w1)
上限-下限 : ((v2+w2) – (v1-w1)) – ((v2-w2) – (v1+w1))
= v2-v1-v2+v1 +w2+w1+w2+w1
= 2(w1+w2)

同様に和の区間は

下限 : (v2-w2) + (v1-w1)
上限 : (v2+w2) + (v1+w1)
上限-下限 : ((v2+w2) + (v1+w1)) – ((v2-w2) + (v1-w1))
= v2+v1-v2-v1+w2+w1+w2+w1
= 2(w1+w2)

よって、両者とも区間の幅の関数になる。

乗算は
値1 : (v1+w1) * (v2+w2) = (v1v2+v1w2+v2w1+w1w2)
値2 : (v1-w1) * (v2+w2) = (v1v2+v1w2-v2w1-w1w2)
値3 : (v1+w1) * (v2-w2) = (v1v2-v1w2+v2w1-w1w2)
値4 : (v1-w1) * (v2-w2) = (v1v2-v1w2-v2w1+w1w2)

値をどれか取って確かめる。

差 : 値4-値1:
(v1v2-v1w2-v2w1+w1w2) – (v1v2+v1w2+v2w1+w1w2)
= (-v1w2-v2w1) – (v1w2+v2w1)
= -2(v1w2+v2w1)

和 : 値4+値1:
(v1v2-v1w2-v2w1+w1w2) + (v1v2+v1w2+v2w1+w1w2)
= 2(v1v2+w1w2)

いずれも v1,v2 が残ってしまう

問2.10
ゼロ除算の問題?

(define (div-interval x y)
  (if (or (= (upper-bound y) 0) (= (lower-bound y) 0))
      (display "error")
      (mul-interval x
                    (make-interval (/ 1.0 (upper-bound y))
                                   (/ 1.0 (lower-bound y))))))

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です