使用Haskell在大型结构上使用多个拉链

时间:2012-08-27 08:05:50

标签: haskell zipper

  

可能重复:
  Zipper like data structure with more then one cursor

让一棵大树(或另一个大数据结构)。假设你有一些兴趣点(P = {p1,p2,...},其中p中的pN)。你可以为每个pN使用拉链但是,如果我必须在特定的pN上更新(CRUD)T,该怎么办?

忽略共享内存问题(通过锁解决),使用命令式语言我可以使用指针。正在更新pN我正在更新T.

什么是正确的方法(“纯粹的”)Haskell?

谢谢!

注意:P是一个真实的列表,所有我们有P的兴趣点,我们可以一次更新一个点,部分或全部。存在P以避免每次搜索每个pN(T很大)。再次感谢!

更新:对不起,我找到了对我的问题(Zipper like data structure with more than one cursor)的正确回复,我如何更新(或删除)我的问题?

1 个答案:

答案 0 :(得分:1)

  

“您可以为每个pN使用拉链”

想象一下像Zork这样的文字冒险游戏。你是拉链,T是你正在探索的树世界。在p7室,您可以更改内容并在CRUD中执行U.然后你看看你的选择:

  • 你可以向上移动树T
  • 您可以向左移动树T
  • 您可以向左移动树T

该列表涵盖二叉树中的基本移动,您的T可能不同。要更新所有P,你沿着某条路径走拉链,访问所有p1,p2,p3等。一个简单的路径是从T的根开始,下降到p1,返回到T的根,下降到p2,回到T的根,下降到p3等等。

最终你完成并离开了T世界。这通常被称为“关闭拉链”。