SICP : Ex1.35

これは、数列の不動点の近似値を求めるという問題。与えられた式から黄金比の近似値を求めた。

回答

この問題もConcurrent Cleanを使って回答します。

Start :: Real
Start = fixed_point (\x = 1.0 + 1.0 / x) 1.0

tolerance =: 0.0000000001

fixed_point f first_guess
	= try first_guess
where
	close_enough a b
		= tolerance > (abs $ a - b)
	try guess
		# next = f guess
		| close_enough guess next
			= next
			= try next

感想

不動点と聞いて、memoizeの一連の記事(memoizeを検索)を思い出したのですが、あっちは関数列の不動点を求める問題で、こっちは数列の不動点の近似値を求める問題。だから、中身も違います。