暇なので復習してみた

SICP 問題 1.35

(1)黄金比 φ が変換 x → 1 + 1/x の不動点であることを示せ。

黄金比の定義

直線を 2 つに分割することを考える。
一つを a、もう一つを b とする。
このとき、 a : b = b : (a + b) となる、
a と b の比率を黄金比と言う。

a : b = b : (a + b)

の式を比例式の性質*1を使い

b * b = a * (a + b)
b^2 = a * (a + b)

の式を得る。

ここで a の長さを 1 とする。

b^2 = 1 * (1 + b)
b^2 = 1 + b

両辺を b で割れば

b = 1/b + 1

を得る。
よって、黄金比 φ は、変換 x → 1 + 1/x の不動点である。

(2)この事実を使い fixed-point 手続きにより φ を計算せよ。

(define tolerance 0.00001)

(define (fixed-point f first-guess)
  (define (close-enough? v1 v2)
    (< (abs (- v1 v2)) tolerance))
  (define (try guess)
    (let ((next (f guess)))
      (if (close-enough? guess next)
          next
          (try next))))
  (try first-guess))

(define phi (fixed-point (lambda (x) (+ 1 (/ 1 x))) 1.0))

実行結果

gosh> phi
1.6180327868852458

*1:比例式の外項の積と内項の積は等しい。