【发布时间】:2012-04-20 19:20:51
【问题描述】:
我正在寻找一种方法来记忆 OCaml 函数 f 的结果,该函数需要两个参数(通常是更多参数)。此外(这是困难的部分),如果这两个参数的任何一个值被垃圾回收,我希望这个过程的映射完全忘记结果。
对于只接受一个参数的函数,这可以通过Weak 模块及其Make 函子以一种直接的方式完成。为了将其推广到可以记忆更高元函数的东西,一个天真的解决方案是创建一个从值元组到结果值的弱映射。但这对于垃圾回收将无法正常工作,因为值的元组仅存在于 memoization 函数的范围内,而不是调用 f 的客户端代码。事实上,弱引用将指向元组,它会在记忆化后立即被垃圾回收(在最坏的情况下)。
有没有办法在不重新实现Weak.Make 的情况下做到这一点?
Hash-consing 与我的要求是正交的,事实上,对于我的价值观来说并不是真正可取的。
谢谢!
【问题讨论】:
标签: caching ocaml weak-references memoization