
27 May
2007
27 May
'07
4:57 a.m.
On 5/27/07, Stefan O'Rear
memofix :: ((a -> b) -> (a -> b)) -> a -> b memofix ff = let g = memoize (ff g) in g
fib = memofix $ \fib k -> case k of 0 -> 0 1 -> 1 n -> fib (n-1) + fib (n-2)
But this way you miss pattern matching and guards? How would you write something like: ack = curry (memoize a) where a (0,n) = n + 1 a (m,0) = ack (m-1) 1 a (m,n) | m < 0 || n < 0 = error "ack of negative integer" | otherwise = let inner = ack m (n-1) in ack (m-1) inner -- Felipe.