計算機プログラムの構造と解釈 第二版 P40 問題1.35
まず日本語を読む。求められているモノは2つ
0.黄金比が、ホニャララ(書くのメンドい)の不動点であることを示す。
1. fixed-pointで計算。
φ^2 = φ + 1
の正の解が黄金比の値
と定義があるので、
φ = x と置き換えれば、
x^2 = x + 1
両辺をxで割って
x = 1 + 1/x
これは
f(x) = 1 + 1/x
のときの
f(x) = x
を満たす値を見つけるということだから、
黄金比φは変換
x → 1 + 1/x
の不動点であるといえる。
んでソース
#!/usr/local/bin/gosh ;; -*- coding: utf-8 -*- (define (close-enough? x y) (< (abs (- x y)) 0.001)) (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)) ;; main (define (main args) (display "黄金比 : ") (display (fixed-point (lambda (x) (+ 1 (/ 1 x))) 1.0)) (newline)(newline) 0)
実行
黄金比 : 1.6180327868852458