Sono confuso per qualcosa. Volevo generare un esempio (in Clojure) che dimostri come un combinatore a virgola fissa possa essere usato per valutare il punto fisso di una sequenza che converge matematicamente dopo un numero infinito di applicazioni ma, in realtà, convergerebbe dopo un numero finito di passi dovuti alla precisione finita dei punti fluttuanti. Mi sembra che manchi qualcosa qui.Utilizzo del combinatore di punti fissi? Perché uno stack trabocca qui?
(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)))))
posso quindi ottenere
user=> ((Y simple-convergent) 0.)
0.0
user=> ((Y simple-convergent) 0.2)
java.lang.StackOverflowError (NO_SOURCE_FILE:0)
non capisco questo overflow dello stack. Più in generale, in relazione al mio post precedente, mi chiedo se qualcuno possa presentare una versione "corretta" di un combinatore a virgola fissa che può essere usata per approssimare punti fissi di sequenze in questo modo.
L'ultima riga potrebbe essere '(func (* 0.5 x))'? Sembra che sia ricorrente con la stessa x per sempre. –