我正在使用Data.Graph Graph来模拟Haskell中的一个仿真。这个仿真被限制在一个2D网格内,我的图形模型也是如此。在网格上每个点上的节点将包含一个Maybe Molecule类型,因此可能存在分子或仅为Nothing。
1 - 2 - 3
| | |
4 - 5 - 6
| | |
7 - 8 - 9
我已经建立了这个表示,但是当我需要更新一个分子的位置时,我感觉自己在绕弯路。目前为止,我已经将所有节点剥离成一个节点列表。我编写了一个函数来交换这个节点列表中的两个项目。但是现在当我尝试将所有内容重新压缩在一起时,我遇到了问题,因为要生成一个新图形,我需要一个顶点列表,而我可以轻松从Graph函数的顶点中获取。但是,我还需要将其与边缘接触的顶点列表压缩在一起。不幸的是,Data.Graph的edges Graph函数返回Edge类型的元组列表,这对于我来说并不是立即有用的,虽然我可以编写一个函数来推导具有连接到顶点的边缘的顶点列表。这样做似乎足够让我想知道是否我错过了点什么,是否有一个Graph函数存在,它只需要一个图形,并返回一个带有更新节点的图形?