函数调用memoization(带多个参数)

时间:2018-04-16 09:25:28

标签: haskell

我想对具有多个不同参数的函数使用memoization

window.contentViewController = yourController;

到目前为止我尝试了什么:

function :: (Int, Int) -> [[Int]] -> Int

但是,它没有按预期工作 - 我收到的信息是:

  

使用'!'时没有(Data.Array.Ix [[Int]])的实例

1 个答案:

答案 0 :(得分:0)

我碰巧知道有一个Data.Function.Memoize软件包肯定会让这件事变得更容易。

在您的情况下,我会在此包中使用带有类型签名的memoize2函数

memoize2 :: (Memoizable a, Memoizable b) => (a -> b -> v) -> a -> b -> v

a = (Int, Int), b = [[Int]]。以下实例将说服您满足类型约束:

Memoizable Int
Memoizable a => Memoizable [a]
(Memoizable a, Memoizable b) => Memoizable (a, b)

警告说:虽然我对这个包有一些好感,但它看起来不太便携或不可靠(如果你要用它来构建真实的东西)。可以在Hackage页面上找到以下声明:

  

请注意,此样式中的大多数memoization依赖于关于非严格性(如懒惰)的实现的假设,这些假设不是由语义保证的。但是,它出现才能正常工作。