Jul 07, 2009 01:50
Ковырялся тут с fix, написал такую штуку:
fib self 0 = 1
fib self 1 = 1
fib self n = self (n - 2) + self (n - 1)
fixMemo f = let x = f (map x [0..] !!) in x
fixMemo fib 10000 отрабатывает почти мгновенно, в отличие от.
Других открытий, правда, не сделал, а они есть?
haskell
Leave a comment
Comments 10
fibMemoLoeb = loeb (map (\n memo -> fib (memo !!) n) [0..])
А это обычная функция Фибоначчи, без кэширования:
fibLoeb :: (Num a, Num b) => a -> b
fibLoeb = loeb (\n self -> fib self n)
где
loeb x = let y = fmap (\a -> a y) x in y
Reply
loeb :: (Functor f) => f (f b -> b) -> f b
Reply
Reply
Reply
Leave a comment