【发布时间】:2013-12-30 06:51:32
【问题描述】:
我已经沉迷于 Clojure 的核心数据结构。在使用其他语言工作时,我尽量忠实于它们各自的习语,但偶尔,一些持久性数据结构正是解决问题的正确方法。
特别是,我正在寻找 Phil Bagwell 的向量和数组映射尝试(即哈希映射)的实现。相关库应包括集合、队列和排序集合/地图变体以获得奖励积分。
【问题讨论】:
标签: data-structures clojure libraries immutability
我已经沉迷于 Clojure 的核心数据结构。在使用其他语言工作时,我尽量忠实于它们各自的习语,但偶尔,一些持久性数据结构正是解决问题的正确方法。
特别是,我正在寻找 Phil Bagwell 的向量和数组映射尝试(即哈希映射)的实现。相关库应包括集合、队列和排序集合/地图变体以获得奖励积分。
【问题讨论】:
标签: data-structures clojure libraries immutability
Haskell 在各种库中都有很多持久性集合,足以在此处列出它们是不合适的,因此我只提到了与 Clojure 的 HAMT 最接近的等价物。
我希望看到更像 Clojure 的无序容器的 32 元变体。
【讨论】:
这是我自己的图书馆的一部分,但我想我必须提到它,因为它是恕我直言的独特且非常有用:PersistentTreeGrid。它提供:
它足够快,可以用作游戏的后备存储(例如可变形 3D 地形的稀疏存储)。
它是用 Java 编写的,但我已经成功地从其他 JVM 语言中使用过它。
【讨论】:
【讨论】:
对于 Python,有一个名为 pyrsistent 的库(我是作者)。它只关注持久性/功能性数据结构。
它包含持久向量、映射、集合、记录、包、列表、出队以及向量、映射和集合的类型和不变检查版本的实现。
还有一堆方便的函数可以转换成内置的对应物。
有关更多信息和示例,请参阅github page。
【讨论】:
对于 Python,fn.py 正在实现持久数据结构以及添加一些其他功能特性。
还有另一个 python 库 pyrsistent 看起来更易于维护和性能。
【讨论】:
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。
有一个类似于 Clojure 的 Vector 的 RRB-Tree in the works(基于另一篇 Phil Bagwell 论文),但支持随时插入。
【讨论】: