某些数组操作,例如 set
、equals
和 concat
如果需要完整的结构,它们将相当慢(主要是 O(n))复制到内存中。我知道 Clojure 等不可变语言使用一些技巧来避免这些操作的复杂性。这些技巧是什么?
最佳答案
由于持久数据结构的保证,Clojure 中使用了“结构共享”。这意味着,例如,如果您使用 cons/conj 添加到列表/向量,则旧数据结构将在新旧数据结构之间共享。
在幕后,数据存储在具有高分支因子的浅树中。
Rich Hickey 自己讨论了基本结构及其优化 in this video
关于algorithm - 不可变语言如何高效地实现 set、concat、equals 等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19161267/