Estoy confundido acerca de algo. Quería generar un ejemplo (en Clojure) que demostrara cómo se podría usar un combinador de punto fijo para evaluar el punto fijo de una secuencia que matemáticamente converge después de un número infinito de aplicaciones pero que, de hecho, convergería después de un número finito de pasos debido a la precisión finita de los puntos flotantes. Aparentemente me falta algo aquí.Uso del combinador de punto fijo? ¿Por qué un desbordamiento de pila aquí?
(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)))))
A continuación, puedo conseguir
user=> ((Y simple-convergent) 0.)
0.0
user=> ((Y simple-convergent) 0.2)
java.lang.StackOverflowError (NO_SOURCE_FILE:0)
No entiendo este desbordamiento de pila. De manera más general, en relación con mi publicación anterior, me pregunto si alguien puede presentar una versión "correcta" de un combinador de punto fijo que se puede usar para aproximar puntos fijos de secuencias de esta manera.
¿Debería la última línea ser '(func (* 0.5 x))'? Parece que es recurrente con la misma x para siempre. –