`(graph-edge-add (G <multidigraph>) u v id [#!rest attr])`method`(graph-edge-add (G <multigraph>) u v id [#!rest attr])`method`(graph-edge-add (G <digraph>) u v [#!rest attr])`method`(graph-edge-add (G <graph>) u v [#!rest attr])`method`(graph-edge-add! (G <multidigraph>) u v id [#!rest attr])`method`(graph-edge-add! (G <multigraph>) u v id [#!rest attr])`method`(graph-edge-add! (G <digraph>) u v [#!rest attr])`method`(graph-edge-add! (G <graph>) u v [#!rest attr])`methodAdds an edge u->v to the graph G. Optional attributes can be added as keyword / value pairs in

`attr`. Note that for multigraph-types, an identifier (`id`) is needed to distinguish edges (can be anything that compares with`equal?`). For undirected graph types this adds u->v and v->u to the graph since the distinction is meaningless.Raises an error if the edge already exists or already exists with the ID

`id`. If either of the vertices`u`or`v`do not exist when this method is called, they are first added to the graph, and the edge added afterwards.- G
- the graph to add the edge to
- u
- the head vertex
- v
- the tail vertex
- id
- an identifier (compares with
`equal?`) for the edge (in cases where multiple edges can exist).**NOTE:**Do not set`id`to be #f, as this can cause problems with removing edges later, and makes no logical sense. - attr
- a list of keyword / value pairs