場所/遷移ペトリネットを表現するためのエレガントなソリューションを考え出そうとしています. これまでのところ、次のように保存しています。
{:netname {:places {:name tokens, ...}
:transitions #{:t1, :t2, :t3, ...}
:edges_in #{[:from :to tokens], ...}
:edges_out #{[:from :to tokens], ...}}}
tokens
は数字で、すべてが対応する名前の記号で始まります。
//編集 - いくつかの明確化: :netname と :name は一意です。これは、場所が再び一意の名前を持つ必要がある 2 つのネットをマージできる必要があるためです。数値トークンは、場所またはエッジの作成中にペトリネットのユーザーによって決定されます。
私の問題のためのより精巧な/より良いデータ構造へのいくつかのポインタまたはリンクに感謝します.
//編集 2 - 地名の一意性のため、データ構造の最初のテイクを作り直しました。:places がハッシュマップを参照するようになりました。また、edges_in と out はハッシュマップになりました。これは、すべてのエッジがその起点、終点、およびトークン番号で一意であるためです。
//編集 3 - 構造の使用: それは、私が言うのと同じ量で読み書きされます。ペトリネットの使用方法では、ネットの変更と読み取りの間に往復があります。
また、上記の構造を少し変更したため、:edges_in と :edges_out はトリプレットをリストではなくベクトルとして保存するようになりました。load-string
はリストを式として評価するため、ハッシュマップをファイルに保存してそこから読み取るだけです。