Erlang Thursday – digraph:add_vertex/1

今天的Erlang Thursday如上星期保证的开始深入digraph模块,今天讲的是 digraph:add_vertex/1.

首先我们创建一个新的有向图以便我们可以往里加节点。

1
2
Graph = digraph:new().
% {digraph,20498,24595,28692,true}

我们用 digraph:add_vertex/1 往此有向图里加入一些节点。

1
2
3
4
5
6
digraph:add_vertex(Graph).
% ['$v'|0]
digraph:add_vertex(Graph).
% ['$v'|1]
digraph:add_vertex(Graph).
% ['$v'|2]

因为我们没有指定我们想要加入的节点的任何信息,Erlang将为我们创建一个 [‘$v’ | I]格式的节点,它有一个空列表做为标签,I是一个非负整数。

如果我们希望提供节点标识符,我们也可以用 digraph:add_vertex/2 来添加一个节点,或者用 digraph:add_vertext/3 来提供节点标识符和标签。正如 digraph:add_vertex/1 ,digraph:add_vertex/2 也用空列表来做为标签。

1
2
3
4
digraph:add_vertex(Graph, vertex1).
% vertex1
digraph:add_vertex(Graph, vertex2, "Vertex 2").
% vertex2

我们现在添加了5个节点,可以用 digraph:vertices/1 来检查在这个有向图里有哪些节点。

1
2
digraph:vertices(Graph).
% [['$v'|2],['$v'|1],['$v'|0],vertex2,vertex1]

如果我们决定以 [‘$v’ | I]格式自己尝试添加一个节点,然后接着调用 digraph:add_vertex/1 ,那么我们可能会有麻烦。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
digraph:add_vertex(Graph, ['$v' | 3]).
% ['$v'|3]
digraph:add_vertex(Graph).
% ['$v'|3]
digraph:vertices(Graph).
% [['$v'|2],['$v'|1],['$v'|0],['$v'|3],vertex2,vertex1]
digraph:add_vertex(Graph, ['$v' | 4]).
% ['$v'|4]
digraph:vertices(Graph).
% [['$v'|4],
% ['$v'|2],
% ['$v'|1],
% ['$v'|0],
% ['$v'|3],
% vertex2,vertex1]

我们自己通过制定格式来添加一个节点,然后又让Erlang帮我们添加一个新的节点,那么最终的结果就是“丢失”一个节点,因为当我们看这个有向图的状态的时候可以看到原来是发生了覆盖的情况。

原文链接: https://www.proctor-it.com/erlang-thursday-digraph-add_vertex-1/