【发布时间】:2011-07-29 23:57:31
【问题描述】:
我正在尝试记忆以下功能:
gridwalk x y
| x == 0 = 1
| y == 0 = 1
| otherwise = (gridwalk (x - 1) y) + (gridwalk x (y - 1))
看着this我想出了以下解决方案:
gw :: (Int -> Int -> Int) -> Int -> Int -> Int
gw f x y
| x == 0 = 1
| y == 0 = 1
| otherwise = (f (x - 1) y) + (f x (y - 1))
gwlist :: [Int]
gwlist = map (\i -> gw fastgw (i `mod` 20) (i `div` 20)) [0..]
fastgw :: Int -> Int -> Int
fastgw x y = gwlist !! (x + y * 20)
然后我可以这样称呼:
gw fastgw 20 20
是否有更简单、更简洁和通用的方法(注意我必须在gwlist 函数中硬编码最大网格尺寸以便从 2D 转换为 1D 空间,以便我可以访问记忆列表)来记忆函数Haskell 中有多个参数?
【问题讨论】:
标签: haskell memoization