
On Mon, 2008-06-16 at 10:19 +0200, Ketil Malde wrote:
"Magicloud Magiclouds"
writes: static int old; int diff (int now) { /* this would be called once a second */ int ret = now - old; old = now; return ret; }
Because there is no "variable" in Haskell. So how to do this in a FP way?
I would claim the FP way is like this:
-- | Repeatedly subtract values from a baseline, returning a list -- containing each intermediate result diff :: Int -> [Int] -> [Int] diff = scanl (-)
Prelude> diff 100 [1..10] [100,99,97,94,90,85,79,72,64,55,45]
Better yet, you could create a recursive type that reflects what you are actually doing: newtype Step a = Step (a -> (a, Step a)) diff' :: Int -> Step Int diff' x = Step (\a -> let r = a - x in (r, diff' r)) This way it will be easier to resume previous diff computations. Best, Michał