正如我所理解的,当您使用如下表达式创建新列表时,Erlang不会复制L1,它只是复制H.
L2 = [H|L1]
Run Code Online (Sandbox Code Playgroud)
Erlang是否具有持久的数据结构(请参阅持久性数据结构)dict,也就是说,当您在树中添加/删除/修改节点时,只复制了少量元素(如Clojure中)?
rvi*_*ing 12
使用时构建列表时,您误解了这种情况[H|T].正如你所说,T不是复制,但两者都没有H.所有发生的事情都是一个新的列表单元格被T引入H作为其头部(它的尾部是T)的引用.使用列表时,创建的唯一位是实际列表单元格,而不是每个单元格中的数据.
使用时也会发生同样的情况dict.当您修改(添加/删除元素)时,dict只dict修改实际结构而不是实际数据dict.它也很聪明,只能复制尽可能少的dict结构来进行修改.
所以,是的,Erlang具有持久的数据结构.在这方面,clojure就像Erlang(我们在它之前很久).