如果需要在内存上进行完整的结构复制,某些数组操作(例如set
,equals
和concat
会相当慢(大多数为O(n))。我知道像Clojure这样的不可变语言会使用一些技巧来避免这些操作的复杂性。那些技巧是什么?
答案 0 :(得分:1)
由于持久数据结构的保证,在Clojure中使用了“结构共享”。这意味着,例如,如果您使用cons / conj添加到列表/向量,则旧数据结构和旧数据结构将共享。
在幕后数据存储在具有高分支因子的浅树中。
Rich Hickey自己讨论了基本结构及其优化in this video