【发布时间】:2011-01-04 18:57:14
【问题描述】:
我发现,Haskell 中的变量是不可变的(因此,它们并不是真正的“变量”)。
在这种情况下,如果我们有一个复杂的大数据结构,比如一棵红黑树,我们应该如何实现真正改变数据结构的操作?
每次插入或删除元素时创建树的副本?
【问题讨论】:
-
“因此,它们并不是真正的‘变量’”——它们确实是。例如,当一位数学家说“让 G 成为群 (S,*),其中 ...”时,G 是变量,即使它永远不会改变。这与 Haskell 中的原理相同。
-
您当然提出了一个有趣的观点,确实结构发生了一些变化以适应不变性而不牺牲性能。将您的结构想象成一个有向图(其中从 A 到 B 的边意味着 A 持有对 B 的引用/索引),然后如果您希望更改 B,则需要复制可访问 B 的任何顶点并更新其引用.例如,我仍然没有找到如何在 Haskell 中表示跳过列表 :)
标签: data-structures haskell immutability