我正在尝试对以下函数进行记忆化:
gridwalk x y
| x == 0 = 1
| y == 0 = 1
| otherwise = (gridwalk (x - 1) y) + (gridwalk x (y - 1))
看了这个,我想到了以下解决方案:
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
函数中硬编码最大网格维度,以便将二维转换为一维空间,以便我可以访问记忆化列表)来记忆化Haskell中具有多个参数的函数?