1.1.8 ブラックボックス抽象としての手続き

おし。環境は整ったっ。
ずいぶんスローペースだけどまぁ色々としょうがないことばかりだし
急いでもしょーがないのでこのペースでやります。

んで

1.1.8 ブラックボックス抽象としての手続き

「この手続きだけ使いたいのに、あれもこれも必要だったのね!!うそつき!!」
とか言われないために、
そのとき使えれば良いだけの手続きは、
その手続きの中に入れてしまってください。ってことらしい。

そんでそれを「ブロック構造」と言うらしい。
へぇ〜

んでもっと良い方法があるらしい。

いや、意味がわかんねぇ。

実際に動かしてみようっと。
でも環境はcoLinuxemacsにあって、
メモしてるのはWindows上の秀丸でして、
コピペができないっていうのが非常に面倒になってきました。
いかがしませう。。

ってことでここ(はてな)を使えば良いんだなっと。
便利だね〜


(define (sqrt x)
(define (square x) (* x x))
(define (good-enough? guess x)
(< (abs (- (square guess) x)) 0.001))
(define (average x y)
(/ (+ x y) 2))
(define (improve guess x)
(average guess (/ x guess)))
(define (sqrt-iter guess x)
(if (good-enough? guess x)
guess
(sqrt-iter (improve guess x) x)))
(sqrt-iter 1.0 x))

(sqrt 5)
gosh> 2.2360688956433634

ふむふむ。これは分かる。
本のままだと動かないから足りない手続きを補完したけど。
まぁさせられたみたいな感じだよね。

(define (sqrt x)
(define (square x) (* x x))
(define (good-enough? guess)
(< (abs (- (square guess) x)) 0.001))
(define (average x y)
(/ (+ x y) 2))
(define (improve guess)
(average guess (/ x guess)))
(define (sqrt-iter guess)
(if (good-enough? guess x)
guess
(sqrt-iter (improve guess))))
(sqrt-iter 1.0))

(sqrt 5)
gosh> 2.2360688956433634

で、これはxは引数としてもらってるから
中で使う手続きでまで引数としてもらう必要は無いよってことだと思われる。