【发布时间】:2011-01-24 10:16:04
【问题描述】:
当前流行的函数式语言中是否有任何一种对记忆化有很好的支持?如果我要根据它的记忆力来选择一种,你会推荐哪一种?为什么?
更新:我正在寻找优化有向图(其中节点可以是函数或数据)。当图中的节点更新时,我希望仅当其他节点的值依赖于更改的节点时才重新计算它们。
Update2:需要免费或开源语言/运行时。
【问题讨论】:
标签: functional-programming memoization
当前流行的函数式语言中是否有任何一种对记忆化有很好的支持?如果我要根据它的记忆力来选择一种,你会推荐哪一种?为什么?
更新:我正在寻找优化有向图(其中节点可以是函数或数据)。当图中的节点更新时,我希望仅当其他节点的值依赖于更改的节点时才重新计算它们。
Update2:需要免费或开源语言/运行时。
【问题讨论】:
标签: functional-programming memoization
对于 Haskell,Conal Elliott 在functional memo tries 上发布了一篇漂亮的博客文章。这项工作非常聪明而且相当有深度,Conal 后来将其扩展到polymorphic functions。无论您使用哪种语言,都强烈推荐使用此内容,因为它揭示了函数式语言中的深层思想。
但是,查看您的更新,尚不清楚 memoization 是否真的是您想要的。您的扩展问题陈述(通过有向图传播更新)几乎是增量计算的教科书示例,Bob Harper 和Umut Acar 在这方面做了很多工作。我相信他们有一个用标准 ML 编写的免费库。在self-adjusting computation 上查看 Umut 的页面。
【讨论】:
是的,你根本不需要记忆,你想要精确的依赖跟踪。 您可以使用 Haskell 函数图库 (fgl) 创建您的有向图,然后使用后继函数来准确了解要更新的节点: http://hackage.haskell.org/cgi-bin/hackage-scripts/package/fgl
本文将极大地帮助您理解文档: http://web.engr.oregonstate.edu/~erwig/fgl/
后继函数名为 suc,在模块 Data.Graph.Inductive.Graph 中
往不同的方向发展,支持此功能的一种流行的函数式语言是 Excel。 :)
【讨论】: