【发布时间】:2010-12-16 21:59:10
【问题描述】:
如何有效地实现一个列表数据结构,在该结构中我可以有 2 个视图来查看列表的开头和结尾,这些视图始终指向列表的开头和结尾,而无需进行昂贵的反向调用。 即:
start x = []
end x = reverse start -- []
start1 = [1,2,3] ++ start
end start1 -- [3,2,1]
end 应该能够在不调用“反向”的情况下执行此操作,而只需从列表自动反向的角度查看给定列表。如果我从串联创建新列表开始,也应该如此。
【问题讨论】:
-
在 Haskell 中你不能改变值。
start永远是空列表,end永远是那个(空列表)的reverse。如果你想保持状态,你应该看看 State monad。 -
更正:更新是指重新绑定。
-
@Absolute:你所说的并没有改变在 Haskell 中你不能改变事物的终极真理(尽管
IOmonad)。你不能重新绑定东西。 -
@Martinho:我的意思是在旧的基础上创建一个新的并将其分配给一个新名称,不知道为什么不清楚。
-
我强烈推荐 Apocalisp 提到的纯功能数据结构。那本书中有不少“啊哈”时刻。
标签: algorithm data-structures haskell list queue