首先我是 Haskell 新手。
我读过这个:高度可变域中的不可变函数对象 https://stackoverflow.com/questions/166379/immutable-functional-objects-in-highly-mutable-domain我的问题几乎是相同的——如何有效地编写状态应该改变的算法。我们以 Dijkstra 算法为例。将会发现新的路径并且应该更新距离。在传统语言中,这很简单,而在 Haskell 中,例如我只能想到创建全新的距离,这会太慢并且消耗内存。对于这种情况,是否有类似设计模式的东西,应该实现具有可变数据结构的算法,并且速度和内存使用是主要关注点?
当然,函数式语言有很多方法可以解决这个问题。
不同的数据结构 - 许多数据结构可以在一个中实现纯功能性的方式,具有与命令式版本相同的算法复杂性。该领域最著名的作品可能是 Chris Okasaki 的作品纯函数式数据结构 http://www.eecs.usma.edu/webs/people/okasaki/pubs.html,但还有许多其他资源。对于 Dijkstra 算法,马丁·厄维格 http://web.engr.oregonstate.edu/~erwig/的工作功能图 http://hackage.haskell.org/package/fgl是合适的。看这个问题 https://stackoverflow.com/questions/2999072/how-do-i-implement-graphs-and-graph-algorithms-in-a-functional-programming-langua以及。
不同的算法 - 有些算法具有内置的可变性假设,快速排序就是一个例子。在这种情况下,可以使用更适合不变性的替代算法。
可变状态——每种函数式语言都可以使用 State monad 来模拟函数式状态。大多数还提供其他形式的可变性,例如 Haskell 的 ST monad 和 IORef。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)