gpt4 book ai didi

Clojure:不变性和持久性

转载 作者:行者123 更新时间:2023-12-04 11:23:42 25 4
gpt4 key购买 nike

每本教科书都说 Clojure 数据结构是“不可变的和持久的”。他们用不同的篇幅解释了这个概念,但到目前为止我还没有弄清楚不变性和持久性之间的区别是什么。是否存在持久但可变的实体?还是不可变但不持久?

最佳答案

不可变意味着该值无法更改,持久性意味着如果该值已存在于程序中,则复制该值的路径。 Clojure 将其用作其结构共享实现的一部分。如果数据不存在,则创建它。如果数据存在,则新数据建立在旧版本数据的基础上,而不会更改或删除它。

原子是持久的,但安全地可变。

user> (def +a+ (atom 0))
#'user/+a+
user> @+a+
0
user> (swap! +a+ inc)
1
user> @+a+
1

瞬变是可变的,但应在突变后保持持久性
user> (def t (transient []))
#'user/t
user> (conj! t 1)
#<TransientVector clojure.lang.PersistentVector$TransientVector@658ee462>
user> (persistent! t)
[1]

了解 Clojure 的持久向量,pt. 1 =>
http://hypirion.com/musings/understanding-persistent-vector-pt-1

持久化数据结构 => https://en.wikipedia.org/wiki/Persistent_data_structure

持久数据结构和托管引用 =>
http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickey

关于Clojure:不变性和持久性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27152555/

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