我正在尝试提出一个优雅的解决方案来表示位置/过渡 petri 网。到目前为止,我将它们保存如下:
{:netname {:places {:name tokens, ...}
:transitions #{:t1, :t2, :t3, ...}
:edges_in #{[:from :to tokens], ...}
:edges_out #{[:from :to tokens], ...}}}
tokens
是一个数字,一切都以具有相应名称的符号开头。
//edit - 更多说明: :netname 和 :name 是唯一的,因为必须可以合并 2 个网络,而这些地方又必须具有唯一的名称。数字标记由 Petri 网的用户在创建地点或边缘期间确定。
对于我的问题,我会感谢一些指向更精细/更好的数据结构的指针或链接。
//edit 2 - 由于地名的独特性,我重新设计了我的第一个数据结构。:places 现在引用哈希图。edge_in 和 out 现在也是 hashmaps,因为每条边都是唯一的,有它的起点、终点和令牌编号。
//edit 3 - 结构的使用:我会说它以相同的数量被读取和写入。使用培养网的方式,在修改网络和阅读网络之间有一个来回的过程,可能会在最后阅读更多内容。
我还稍微修改了上面的结构,所以 :edges_in 和 :edges_out 现在将三元组保存为向量而不是列表。这简化了将 hashmap 保存到文件并从中读取它,因为load-string
将列表计算为表达式。