私は何かについて混乱しています。不動点コンビネータを使用して、無限回の適用後に数学的に収束するシーケンスの不動点を評価する方法を示す例を (Clojure で) 生成したかったのですが、実際には有限回のステップ後に収束します。浮動小数点の有限精度に。ここで何かが足りないようです。
(defn Y [r]
((fn [f] (f f))
(fn [f]
(r (fn [x] ((f f) x))))))
(defn simple-convergent [func]
(fn [x]
(if (zero? x)
0.0
(* 0.5 (func x)))))
私はそれから得ることができます
user=> ((Y simple-convergent) 0.)
0.0
user=> ((Y simple-convergent) 0.2)
java.lang.StackOverflowError (NO_SOURCE_FILE:0)
このスタック オーバーフローがわかりません。より一般的には、私の以前の投稿に関連して、この方法でシーケンスの不動点を近似するために使用できる不動点コンビネーターの「正しい」バージョンを誰かが提示できるかどうか疑問に思っています。