我已经沉迷于Clojure的核心数据结构。在使用其他语言时,我尽量坚持各自的习语,但偶尔会有一些持久的数据结构正确解决问题。
特别是,我正在寻找Phil Bagwell的向量和数组映射尝试(即哈希映射)的实现。相关库应包括奖励积分的集合,队列和有序集/地图变体。
答案 0 :(得分:7)
Haskell在各种库中有很多持久性集合,足以在这里列出它们是不合适的,所以我只提到了与Clojure的HAMT最接近的等价物。
我希望在无序容器上看到32-ary变体,但更像是Clojure。
答案 1 :(得分:1)
答案 2 :(得分:1)
这是我自己的图书馆的一部分,但我想我必须提及它,因为它是恕我直言唯一且非常有用的:PersistentTreeGrid。它提供:
它足够快,可以用作游戏的后备存储(例如,可变形3D地形的稀疏存储)。
它是用Java编写的,但我已经成功地使用了其他JVM语言。
答案 3 :(得分:1)
对于Python,有fn.py实现持久数据结构以及添加一些其他功能特性。
还有另一个python库pyrsistent,它看起来更加维护和高效。
答案 4 :(得分:1)
对于Python,有一个名为pyrsistent的库(我是作者)。它只关注持久性/功能性数据结构。
它包含持久性向量,地图,集合,记录,包,列表,出列以及向量,地图和集的类型和不变检查版本的实现。
还有许多便利功能可以转换为内置对应的功能。
有关更多信息和示例,请参阅github page。
答案 5 :(得分:0)
Paguro提供了Clojure不可变集合的类型安全版本以及一些其他工具,使Java 8中的函数编程更容易一些。这Vector is faster than the one in PCollections。整个项目适合在compact1配置文件中编译的200K jar文件。 All collections are painstakingly fit into the standard Java Collections API。包括Clojure的五个集合实现:Vector,HashSet,HashMap,SortedSet和SortedMap。
有一个RRB-Tree in the works(基于另一个Phil Bagwell论文),像Clojure的Vector,但在任何时候都支持插入。