Structure and Interpretation of Computer Programsにニュートン法による、√計算の例題が掲載されていました。
これで、sqrtにvalueをセットすると、√の値を計算してくれます。
(define (square x) (* x x))
(define (abs x)
(cond ((> x 0) x)
((= x 0) 0)
((< x 0) (- x))
)
)
(define (average x y) (/ (+ x y) 2))
(define (improve guess x)
(average guess (/ x guess))
)
(define (good-enough? guess x)
(< (abs (- (square guess) x)) 0.001)
)
(define (sqrt-iter guess x)
(if (good-enough? guess x)
guess
(sqrt-iter (improve guess x) x)
)
)
(define (sqrt x)
(sqrt-iter 1.0 x)
)
via:Structure and Interpretation of Computer Programs
本書では、この例題を通して、ネストされたプロシージャが書かれていたのですが、ネストされていると「()」の数がものすごく多くなってしまっていてわかりにくいなーと思いました。
>>ネストされていると「()」の数がものすごく多くなってしまっていてわかりにくいなーと思いました。
返信削除だねー。ここらへんは関数型言語としてはしょうがないのかな。
オブジェクト指向で開発やってると特にすんげー気持ち悪く感じるねー。
>オブジェクト指向で開発やってると特にす
返信削除>んげー気持ち悪く感じるねー。
そうそう。
他にわかりやすいー表記方法はないのかよーって昨日、1人突っ込みを入れながら、読んでたよ。
プロシージャーをそれぞれ別個に定義しているのが今のところ一番、わかりやすいかなと。
あとねー、まだ30ページぐらいしか進んでいないのに、再帰的な処理を行うプロシージャーが登場しちゃっているところがしびれるね。
しかも、ニュートン法とかいって、日本ではめちゃくちゃ大学数学の分野だし。
やっぱ数学って大切なんだーと。
ニュートン法懐かしいな。
返信削除全部忘れたけどうちの研究室は
思いっきりそれ専攻だったなー。
まだ30ページって全部でどんだけ
あるんだろね。
>ニュートン法懐かしいな。
返信削除>全部忘れたけどうちの研究室は
>思いっきりそれ専攻だったなー。
あれ、確か、ORだったよね??
ORで、ニュートン法使うんだ??
>まだ30ページって全部でどんだけ
>あるんだろね。
600ページっす。
先は長い><