在Erlang Digraphs中的状态

Joh*_*ane 7 erlang directed-graph

Erlang有向图模块通过改变状态让我感到惊讶.

在Erlang中处理其他数据结构模块时,例如sets模块,传入的数据结构的实例是未修改的.该函数返回一个新的,更改的版本,例如

>S = sets:new().
>sets:size(S).
0
>T = sets:add_element(S, "element").
>sets:size(S).
0
>sets:size(T).
1
Run Code Online (Sandbox Code Playgroud)

这不是处理有向图模块时的行为.

>G = digraph:new().
>digraph:no_vertices(G).
0
>digraph:add_vertex(G, "vertex").
>digraph:no_vertices(G).
1
Run Code Online (Sandbox Code Playgroud)

首先,为什么有向图库在这方面有所不同?

其次,更重要的是,digraph模块如何针对现有绑定添加新状态?

我假设状态存储在另一个进程中,digraph模块使用现有的和未改变的绑定G进行识别.是这种情况吗?或者是否有其他方法可以修改与绑定相关联的状态?

Ala*_*ore 9

  1. 可能效率
  2. 它使用ETS存储有向图.new的返回值实际上是对ets表的引用.

运行工具栏:start().从你的erlang shell打开表可视化应用程序 - 你会看到一组用于digraph实用程序的ets表.

edges
vertices
neighbours
Run Code Online (Sandbox Code Playgroud)

来自digraph:new调用的返回值中的值是这些表的ets表id ...