Estoy tratando de entender Haskell realization of memoization, pero no entiendo como funciona:memoization con recursividad
memoized_fib :: Int -> Integer
memoized_fib = (map fib [0..] !!)
where fib 0 = 0
fib 1 = 1
fib n = memoized_fib(n - 2) + memoized_fib(n - 1)
Primero de todo lo que aún no entiendo por qué 'map'-función de obtener tres parámetros (función - fib, list [0 ..] y ||), pero no dos cómo debe hacer.
Actualizado:
he tratado de reescribir el código, pero conseguir el resultado diferente:
f' :: (Int -> Int) -> Int -> Int
f' mf 0 = 0
f' mf 1 = 1
f' mf n = mf(n - 2) + mf(n - 1)
f'_list :: [Int]
f'_list = map (f' faster_f') [0..]
faster_f' :: Int -> Int
faster_f' n = f'_list !! n
¿Por qué? ¿Hay algún error en mi razonamiento?
Podrían haber puesto algún paréntesis extra de allí para que sea un poco más evidente '(mapa fib [0 ..] !!) '==' ((mapa fib [0 ..]) !!) ' – soulcheck
El resultado diferente en su actualización se debe al desbordamiento' Int'. Use 'Entero 'en su lugar; aparte de eso, me parece a primera vista. – yatima2975