【发布时间】:2011-01-14 02:36:22
【问题描述】:
我有一个接受参数并产生结果的函数。不幸的是,该函数需要很长时间才能产生结果。该函数经常使用相同的输入调用,这就是为什么如果我可以缓存结果会很方便。类似的东西
let cachedFunction = createCache slowFunction
in (cachedFunction 3.1) + (cachedFunction 4.2) + (cachedFunction 3.1)
我正在研究 Data.Array,虽然该数组是惰性的,但我需要使用对列表(使用 listArray)对其进行初始化 - 这是不切实际的。如果“关键”是例如'Double' 类型,我根本无法初始化它,即使理论上我可以为每个可能的输入分配一个 Integer,我也有数万个可能的输入,而我实际上只使用了少数几个。我需要使用函数而不是列表来初始化数组(或者,最好是哈希表,因为只会使用少数结果)。
更新:我正在阅读 memoization 文章,据我了解,MemoTrie 可以按照我想要的方式工作。可能是。有人可以尝试生成“cachedFunction”吗?最好是一个需要 2 个 Double 参数的慢速函数?或者,或者,这需要一个 Int 参数在一个大约 [0.1 亿] 的域中不会吃掉所有的内存?
【问题讨论】:
标签: caching haskell memoization