SICP

SICP を読んでみる #38 MIT OCW 2B/第二章 pp.53-54

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 でタグを打ちながら記事を書くのがいい加減辛い、、、、
テーマも適当だし、いい加減もっと手軽なものに移行したい。

コメントを残す

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