2008/05/26

[scheme][algorithm]ニュートン法によるルート計算

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

本書では、この例題を通して、ネストされたプロシージャが書かれていたのですが、ネストされていると「()」の数がものすごく多くなってしまっていてわかりにくいなーと思いました。

4 件のコメント:

  1. >>ネストされていると「()」の数がものすごく多くなってしまっていてわかりにくいなーと思いました。
    だねー。ここらへんは関数型言語としてはしょうがないのかな。

    オブジェクト指向で開発やってると特にすんげー気持ち悪く感じるねー。

    返信削除
  2. >オブジェクト指向で開発やってると特にす
    >んげー気持ち悪く感じるねー。

    そうそう。

    他にわかりやすいー表記方法はないのかよーって昨日、1人突っ込みを入れながら、読んでたよ。

    プロシージャーをそれぞれ別個に定義しているのが今のところ一番、わかりやすいかなと。

    あとねー、まだ30ページぐらいしか進んでいないのに、再帰的な処理を行うプロシージャーが登場しちゃっているところがしびれるね。

    しかも、ニュートン法とかいって、日本ではめちゃくちゃ大学数学の分野だし。

    やっぱ数学って大切なんだーと。

    返信削除
  3. ニュートン法懐かしいな。
    全部忘れたけどうちの研究室は
    思いっきりそれ専攻だったなー。

    まだ30ページって全部でどんだけ
    あるんだろね。

    返信削除
  4. >ニュートン法懐かしいな。
    >全部忘れたけどうちの研究室は
    >思いっきりそれ専攻だったなー。

    あれ、確か、ORだったよね??
    ORで、ニュートン法使うんだ??

    >まだ30ページって全部でどんだけ
    >あるんだろね。

    600ページっす。
    先は長い><

    返信削除