gpt4 book ai didi

clojure - Elixir 是否具有类似于 Clojure 的持久数据结构?

转载 作者:行者123 更新时间:2023-12-03 13:29:27 26 4
gpt4 key购买 nike

Elixir 中的所有不可变数据结构都是持久的吗?如果不是,它们中的哪些是,哪些不是?此外,它们与 Clojure 中的持久数据结构相比如何?

最佳答案

是的,它们中的大多数都是持久数据结构。

例如,Elixir 列表是链表,而链表是退化树(它只有一个分支):

Elixir: list = [1, 2, 3, 4]
Tree: 1 -> 2 -> 3 -> 4

每次将元素添加到列表中时,它都会共享它的尾部:
Elixir: [0|list]
Tree: 0 -> (1 -> 2 -> 3 -> 4)

Elixir 的 HashSet 和 HashDict 实现基于 Clojure 的持久数据结构,并且实际上是树。 There is some write up on Joseph's blog .

映射也是持久性数据结构,它们非常有趣,因为它们的表示会根据键的数量而变化。当您有小 map 时,假设:
%{:foo => 1, :bar => 2, :baz => 3}

它表示为:
        -------------(:foo, :bar, :baz)
|
(map, keys, values)
|
------(1, 2, 3)

因此,每次您更新一个键时,我们都会共享“键”存储桶并仅更改值存储桶。这对于小型 map 非常有效,但是一旦在 Erlang 18 中获得大约 20 个键,它们就会将其表示更改为基于 Hash Array Mapped Tries这也类似于 Clojure。

注意元组不是持久的(它们代表内存中的连续空间)。一旦更改元组中的一个元素,就会创建一个全新的元组。这使得它们非常适合保存和访问少量元素以及对它们进行模式匹配,但您绝对不想保存很多元素。

关于clojure - Elixir 是否具有类似于 Clojure 的持久数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30203227/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com