私はHaskellでシミュレーションをモデル化するためにData.Graphグラフを使用しています。シミュレーションは、私のグラフモデルの2Dグリッドに限定されています。下のグリッド上の各ポイントのノードには、Maybe Moleculeタイプが含まれているので、分子が存在するか、まったく存在しない可能性があります。Haskellでグラフを編集/更新する
1 - 2 - 3
| | |
4 - 5 - 6
| | |
7 - 8 - 9
私はこの表現を設定しているが、それは私が、私は問題の周りの長い道のりを行くよ感じる分子の位置を更新することになると。私がこれまで行ってきたことは、すべてのノードをノードのリストに取り除いたものです。私はこのノードのリストにある2つのアイテムを交換する関数を書いています。しかし、今私がすべてを一緒に戻すようになったら、問題に遭遇します。なぜなら、新しいグラフを生成するためには、頂点グラフ関数から簡単に得られる頂点のリストが必要だからです。しかし、私はまた、エッジが触れる頂点のリストでそれを圧縮する必要があります。残念ながら、Data.Graphのedgesグラフ関数は、頂点までの辺を持つリスト頂点を派生させる関数を書くことができるけれども、私が見る限り、グラフを生成するのに直ちに役に立たない、タイプがEdgeのタプルのリストを返します。そうすることは、私がポイントを見逃しているのを驚かせるのに十分な仕事であるようです。そこには、グラフを取り、更新されたノードを持つグラフを返すグラフ関数がありますか?
グラフを使用すると、隣接ノードが衝突検出チェックのために他の分子によって占有されているかどうかがわかります。 – mikeyP
@mikeyPしかし、配列でもそうすることはできますか? –
あなたが正しいです、グラフの下に配列です。しかし、グラフでは、グラフ上のノード(分子が通過できない領域)を削除することができます。私は配列でそれを行うためのきれいな方法を見ることができません。 – mikeyP