2015年1月25日日曜日

開発環境

計算機プログラムの構造と解釈[第2版](ハロルド エイブルソン (著)、ジュリー サスマン (著)、ジェラルド・ジェイ サスマン (著)、Harold Abelson (原著)、Julie Sussman (原著)、Gerald Jay Sussman (原著)、和田 英一 (翻訳)、翔泳社、原書: Structure and Interpretation of Computer Programs (MIT Electrical Engineering and Computer Science)(SICP))の1(手続きによる抽象の構築)、1.1(プログラムの要素)、1.1.7(例: Newton法による平方根)、問題 1.8.を解いてみる。

その他参考書籍

問題 1.8.

コード(BBEdit, Emacs)

sample8.scm

#!/usr/bin/env gosh
;; -*- coding: utf-8 -*-

(define a 1.0e-200)
(define b 1.0e+200)

(define square (lambda (x) (* x x)))
(define cubic (lambda (x) (* (square x) x)))

(define (improve guess x)
  (/ (+ (/ x
           (square guess))
        (* 2 guess))
     3))

(define (good-enough? guess-old guess-mew)
  (< (abs (- guess-old guess-mew))
     (* guess-mew 0.001)))

(define (cubic-root-iter old-guess new-guess x)
  (if (good-enough? old-guess new-guess)
      new-guess
      (cubic-root-iter new-guess
                 (improve new-guess x)
                 x)))

(define (cubic-root x)
  (cubic-root-iter 1.0 2.0 x))

(print (cubic-root 8))
(print (cubic-root 1000))
(define x (cubic-root a))
(print x)
(print (cubic x))
(print (- (cubic x) a))
(define y (cubic-root b))
(print y)
(print (cubic y))
(print (- (cubic y) x))

入出力結果(Terminal(gosh), REPL(Read, Eval, Print, Loop))

$ ./sample7.scm
0.03125
9.765625e-4
9.765625e-4
1.0e100
1.0e200
1.0e200
1.0000000000013873e-100
1.0000000000027745e-200
2.774504132969674e-212
1.0000000000013873e100
1.0000000000027746e200
1.0000000000027746e200
$

0 コメント:

コメントを投稿