
Tomasz Zielonka wrote:
On Tue, May 29, 2007 at 02:19:31PM +0200, Tomasz Zielonka wrote:
On Tue, May 29, 2007 at 12:15:23PM +0200, Vincent Kraeutler wrote:
ever the interested amateur, i admittedly remain stumped by fix (there's evidence i'm not the only one [1])
The above code is equivalent to
let l = 1 : scanl (+) 1 l in l
which is a bit easier to decipher.
The rest is maths and the subtleties of lazy evaluation.
... and these are the things you need to focus on to understand this code. In this case the use of fix is almost a small syntactic issue - you can eliminate it by inlining its definition.
Best regards Tomek
i see that the definition of fix (from Control.Monad.Fix) could not be any simpler:
fix f = let x = f x in x
same goes for the type: Prelude> :t Control.Monad.Fix.fix Control.Monad.Fix.fix :: (a -> a) -> a it's just that i find it difficult to get concrete intellectual mileage out of it. i can reproduce results for specific examples (and even manipulate them a bit), but feel like i'm missing something deep yet simple. say, i would not know where and how to apply it. so obviously true understanding is still missing. reminds me of my first encounters with $H \psi = E \psi$. ;-) most likely, i should just more carefully read the references i cited myself ;-) anyhow. if someone has a "pedestrian's guide to the fixed point operator" lying around, a link would be much appreciated. kind regards, v.