【发布时间】:2012-02-26 05:41:59
【问题描述】:
我想记住一个带有类型的函数,比如说,
f :: Int -> Integer
我可以很容易地做到这一点,例如使用MemoCombinators 包,例如:
f_ = Memo.integral f
但是,当给定一对(x, f x) 时,在给定f x 的情况下,还有很多其他点可以很容易地计算f:
freebies :: (Int, Integer) -> [(Int, Integer)]
但是给定一个点x',计算一些x 的elem x' . map fst $ freebies (x, f x) 并不便宜。所以我想在这些额外的(x', y') 对可用时存储它们,以便以后可以有效地计算f x'。
我的问题是,有什么好的方法来记忆这样的功能?
【问题讨论】:
-
我们在谈论什么样的函数
f?它似乎基本上是递归的,还是计算增量近似?除非知道x和x'之间的关系,否则这个问题没有通用的解决方案。 -
您的问题是关于如何通过记忆所有计算出的 f(x) 来计算 f⁻¹(y) 吗?
-
dfelmstr:我的出发点是我同时拥有
f和freebies,但f不是递归的,因此计算f x'并不涉及计算f x,即使@ 987654341@ 在map fst $ freebies (x, f x)。 -
nist: 不,我想计算所有的
f x1,f x2, ...,f xn,但如果f xj不那么贵就好了如果它已经是来自f xi的一些i<j的免费赠品,则再次计算部分。
标签: haskell memoization