/ / Haskell структура даних - haskell, рекурсія, запам'ятовування

Структура даних Хаскела - хешкелл, рекурсія, мемуалізація

Я намагаюся створити структуру даних в Haskell, функції якої можна використовувати, щоб уникнути повторного обчислення значень. Наприклад, скажіть, у мене була така функція:

f :: Int -> Int -> Int
f 1 1 == 1
f m n
| abs m > n = 0
| OTHERWISE if value of f m n has already been computed by another recursive branch, return that value and add it to the "database"
| OTHERWISE return f (m-1) (n-1) + f (m - 1) n

Я вже розглядав запам'ятовування, але не зміг реалізувати рішення:

Пропозиції? :)

Відповіді:

5 за відповідь № 1

Чудове пояснення тут.

я кохаю memoize пакет :)

Приклад (розв’язування "Жаба підскакує по сходах ..." проблема):

import Data.Function.Memoize

ladder :: Integer -> Integer -> Integer
ladder n k = g n
where g = memoize f
f 0 = 1
f x = sum [g (x - y) | y <- [1..if x < k then x else k]]