В этом пакете есть несколько функций для преобразования рекурсивных функций в рекурсивные функции динамического программирования для повышения производительности:
К сожалению, у них есть только пример для простейшего типа функции, и нет примеров того, как использовать функцию от 2 переменных. Где я могу найти пример того, как, например, превратить функцию [Int] -> Int -> Int
в функцию динамического программирования? В документации говорится, что memo2 принимает два Memo
в качестве первых аргументов, но я не уверен, что это значит.
Решение:
Как описал Хаммар, вместо определения функции как:
foo :: [Int] -> Int -> Int
foo list value = ...
использовать memo2:
import qualified Data.MemoCombinators as Memo
foo = Memo.memo2 (Memo.list Memo.integral) Memo.integral foo'
where ... (define foo' with recursive calls to foo.)