1.1.8 ブラックボックス抽象としての手続き
おし。環境は整ったっ。
ずいぶんスローペースだけどまぁ色々としょうがないことばかりだし
急いでもしょーがないのでこのペースでやります。
んで
1.1.8 ブラックボックス抽象としての手続き
「この手続きだけ使いたいのに、あれもこれも必要だったのね!!うそつき!!」
とか言われないために、
そのとき使えれば良いだけの手続きは、
その手続きの中に入れてしまってください。ってことらしい。
そんでそれを「ブロック構造」と言うらしい。
へぇ〜
んでもっと良い方法があるらしい。
いや、意味がわかんねぇ。
実際に動かしてみようっと。
でも環境はcoLinuxのemacsにあって、
メモしてるのは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
本のままだと動かないから足りない手続きを補完したけど。
まぁさせられたみたいな感じだよね。
で、これはxは引数としてもらってるから
(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
中で使う手続きでまで引数としてもらう必要は無いよってことだと思われる。