This week's LFE Friday was translated with permission from the Erlang Thursday series by Steven Proctor. This week's translator: Robert Virding.

Today's LFE Friday starts to dig into the digraph module, as promised last week, and takes a look at digraph:add_vertex/1.

First we create a new directed graph, so we have something we can add vertices to.

> (set graph (digraph:new))
#(digraph 20495 24592 28689 true)

We then add some vertices to the graph by using digraph:add_vertex/1.

> (digraph:add_vertex graph)
($v . 0)
> (digraph:add_vertex graph)
($v . 1)
> (digraph:add_vertex graph)
($v . 2)

As we don't specify any information about the vertex we want to add, LFE will create a new vertex for us of the format ($v . i), with an empty list as the label where i is a non-negative integer.

We can also use digraph:add_vertex/2 to add a vertex if we wish to provide the vertex identifier, or provide vertex identifier and label in the case of digraph:add_vertex/3. As with digraph:add_vertex/1, digraph:add_vertex/2 uses the empty list as the label as well.

> (digraph:add_vertex graph 'vertex1)
> (digraph:add_vertex graph 'vertex2 "Vertex 2")

We have now added 5 vertices, and can check what vertices we have in the digraph() by using digraph:vertices/1.

> (digraph:vertices graph)
(($v . 2) ($v . 1) ($v . 0) vertex2 vertex1)

If we decide we want to try to add a vertex ourselves of the format ($v . i), we can run into trouble if you call digraph:add_vertex/1 after it.

> (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 . 2) ($v . 1) ($v . 4) ($v . 0) ($v . 3) vertex2 vertex1)

So we add a vertex by specifying the vertex() we want to add, and then add a new vertex and let LFE take care of creating that vertex, and we wind up "losing" a vertex, as one essentially gets overridden when we look at the end state of the digraph().

- Proctor, Robert



20 October 2015