【发布时间】:2011-11-17 17:39:13
【问题描述】:
我正在开发一个用于细分曲面的库。为了表示网格拓扑,我使用了一种分裂顶点板条数据结构(参见左侧的图表)。
在构建网格的过程中,也可以将其视为图形,它创建的节点应该指向另一个尚不存在的节点(参见右侧的图表 - 虚线箭头代表未来的链接)。经典的解决方案是创建一个带有空指针的节点,然后在创建另一个节点时更新它。由于我正在研究 Haskell :) 并且我不想进入代码的阴暗面(杂质),我想知道是否可以在不更新数据的情况下构建网格(图形)。我猜 CPS(Continuation Passing Style)可以完成这项工作,但我想不出办法。
这只是一场梦吗?
更新
让我稍微澄清一下我的问题。我正在寻找一种方法来创建具有直接链接(指针)的节点,直接链接是指没有中间表或映射。只是这样的普通数据定义:
data Mesh = Edge Vertex Mesh Mesh Vertex | Ground
如果我没记错并且可行的话,CPS 将允许高效地创建(无需节点更新)和高效的横向(无需在地图上查找)图。另一方面,图将变得完全不可变,即需要将单个更改传播到整个图,例如更改列表的尾部。
我错了吗?如果没有,怎么办?
【问题讨论】:
-
您应该注意您的陈述的局限性。 Haskell 的原则将禁止您确定
Mesh的内涵身份;也就是说,你想打结,但你无法确定,如果你去某个地方又回来,你实际上是回来了,而不是在无限循环结构中的其他地方。在数学中,图是在任意顶点的“载体集”上定义的;我建议对纯函数图也这样做。
标签: haskell graph continuations continuation-passing