問題1.46 – SICP(計算機プログラムの構造と解釈)その24

問題1.46

(iterative-improve [予測値が十分であるかを調べる手続き] [予測値を改良する手続き])

(define (iterative-improve enough? improve)
  (lambda (guess)
          (define (iter guess)
            (if (enough? guess)
                guess
                (iter (improve guess))))
          (iter guess)))

sqrt手続き

(define (sqrt x)
  (define (enough? guess)
    (< (abs (- (square guess) x)) 0.001))
  (define (improve guess)
    (average guess (/ x guess)))
  ((iterative-improve enough? improve) 1.0))

(sqrt 2)
gosh> 1.4142156862745097

(sqrt 3)
gosh> 1.7321428571428572

fixed-point 関数fの不動点を探索する手続き。

SICP 問題1.46

(define (fixed-point f first-guess)
  (define (close-enough? guess)
    (< (abs (- guess (f guess))) 0.00001))
  (f ((iterative-improve close-enough? f) first-guess)))

(fixed-point cos 1.0)
gosh> 0.7390822985224023

(fixed-point (lambda (y) (+ (sin y) (cos y)))
             1.0)
gosh> 1.2587315962971173
計算機プログラムの構造と解釈
ジェラルド・ジェイ サスマン ジュリー サスマン ハロルド エイブルソン
ピアソンエデュケーション
売り上げランキング: 6542
«
»