目前任何一种流行的功能语言都能很好地支持记忆和功能。如果我要根据它的备忘录选择一个你会推荐的&为什么呢?
更新:我正在寻找优化有向图(其中节点可以是函数或数据)。当图中的节点被更新时,我希望仅当它们依赖于已更改的节点时才重新计算其他节点的值。
Update2:需要免费或开源语言/运行时。
答案 0 :(得分:7)
对于Haskell,Conal Elliott在functional memo tries发布了一篇精美的博客文章。这项工作非常聪明而且非常深刻,后来Conal将其扩展到polymorphic functions。无论你使用什么语言,强烈推荐这些东西,因为它揭示了功能语言中潜在的记忆的深层思想。
然而,看看你的更新,目前还不清楚memoization是否真的是你想要的。您扩展的问题陈述(通过有向图传播更新)几乎是增量计算的教科书示例,Bob Harper和Umut Acar已经完成了大量工作。我相信他们有一个用标准ML编写的免费库。查看self-adjusting computation上的Umut页面。
答案 1 :(得分:4)
在Haskell上,请参阅this作为开始。
对于Lisp来说,this是谷歌的第一个看起来相关的内容。
对于F#this可能是一个很好的起点。
现在我已经完成了谷歌搜索。这好支持吗?你决定: - )
哦,我推荐Mathematica,但据我所知,很多人都被其价格标签推迟了。严格来说,它可能更像是一个术语重写系统,而不是一个函数式编程系统,而且它在任何意义上都不是纯粹的。但它确实做了记忆。
编辑:我忘记了Erlang,它目前有很大的吸引力 - 我不知道怎么做,但我希望它可以做记忆。答案 2 :(得分:3)
是的,您根本不需要进行记忆,您需要精确的依赖性跟踪。 您可以使用Haskell功能图库(fgl)创建ur有向图,然后使用后继函数精确地知道要更新的节点: http://hackage.haskell.org/cgi-bin/hackage-scripts/package/fgl
本文将极大地帮助理解文档: http://web.engr.oregonstate.edu/~erwig/fgl/
后继函数名为suc,在模块Data.Graph.Inductive.Graph
中朝着不同的方向发展,一种支持此功能的流行功能语言是Excel。 :)