我一直在寻找Data.MemoCombinators的来源,但我无法真正看到它的核心位置.
请向我解释所有这些组合器背后的逻辑以及它们如何在实际编程中加速您的程序实际工作的机制.
我正在寻找这个实现的细节,并可选择与其他Haskell方法进行比较/对比来进行memoization.我理解什么是memoization,而不是在寻找它的工作原理.
我在Haskell中编写了0-1背包问题.到目前为止,我对于懒惰和普遍性水平感到自豪.
我首先提供了创建和处理惰性2d矩阵的函数.
mkList f = map f [0..]
mkTable f = mkList (\i -> mkList (\j -> f i j))
tableIndex table i j = table !! i !! j
Run Code Online (Sandbox Code Playgroud)
然后我为一个给定的背包问题制作一个特定的表格
knapsackTable = mkTable f
where f 0 _ = 0
f _ 0 = 0
f i j | ws!!i > j = leaveI
| otherwise = max takeI leaveI
where takeI = tableIndex knapsackTable (i-1) (j-(ws!!i)) + vs!!i
leaveI = tableIndex knapsackTable (i-1) j
-- weight …Run Code Online (Sandbox Code Playgroud) haskell knapsack-problem memoization dynamic-programming lazy-evaluation
Haskell是否提供动态编程的任何工具?在过程语言中,我将使用数组来存储基于递归关系的计算.我如何在Haskell中做类似的事情?