`make-digraph:`procedurewhere:

`NAME`is the graph name (string or symbol)`INFO`is an optional metadata object of an arbitrary type or`#f``NODE-LIST`is an optional list of nodes to be inserted in the graph; each element of the list must be of the form`(N INFO)`where`N`is a unique node number (integer), and`INFO`is an optional metadata object describing the node.`SUCC-LIST`and`PRED-LIST`can be used to define the graph edges upon graph creation. If supplied, these arguments must be lists in which every element is of the form`(I J INFO)`, where`I`and`J`are node numbers, and`INFO`is an optional metadata object.

The returned selector procedure can take one of the following arguments:

`'name`- returns the graph name (string or symbol)
`'info`- returns the graph metadata (arbitrary type)
`'new-id!`- returns a procedure with no arguments, which returns the lowest available node number
`'add-node!`- returns a procedure
`LAMBDA N INFO`which inserts in the graph node with number`N`and metadata`INFO`; if the node already exists in the graph, it will be overwritten with the new metadata `'add-edge!`- returns a procedure
`LAMBDA EDGE`which inserts in the graph the specifed edge; the edge is given by a list of the form`(I J INFO)`, where`I`and`J`are source and destination nodes, respectively, and`INFO`is edge metadata of arbitrary type `'remove-node!`- returns a procedure
`LAMBDA N`which removes node`N`and all its edges from the graph `'nodes`- returns a procedure with no arguments, which returns a list with the nodes of the graph and their metadata
`'edges`- returns a procedure with no arguments, which returns a list with the edges of the graph and their metadata
`'roots`- returns a procedure with no arguments, which returns a list with all nodes in the graph that do not have an predecessor
`'terminals`- returns a procedure with no arguments, which returns a list with all nodes in the graph that do not have a successor
`'order`- returns a procedure with no arguments, which returns the number of nodes in the graph
`'size`- returns a procedure with no arguments, which returns the number of edges in the graph
`'capacity`- returns a procedure with no arguments, which returns the size of the underlying dynamic vector
`'succ`- returns a procedure
`LAMBDA N`which returns a list with the successor nodes of node`N` `'pred`- returns a procedure
`LAMBDA N`which returns a list with the predecessor nodes of node`N` `'succ-list`- returns a procedure with no arguments which returns a list containing the successor nodes for each node.
`'pred-list`- returns a procedure with no arguments which returns a list containing the predecessor nodes for each node.
`'out-edges`- returns a procedure
`LAMBDA N`which returns a list with the outgoing edges of node`N` `'in-edges`- returns a procedure
`LAMBDA N`which returns a list with the incoming edges of node`N` `'has-edge`- returns a procedure
`LAMBDA I J`which returns true if edge`I -> J`exists in the graph and false otherwise `'has-node`- returns a procedure
`LAMBDA N`which returns true if node`N`exists in the graph and false otherwise `'node-info`- returns a procedure
`LAMBDA N`which returns the metadata for node`N` `'node-info-set!`- returns a procedure
`LAMBDA N V`which sets the metadata for node`N` `'foreach-node`- returns an iterator procedure
`LAMBDA F`which iterates over the nodes in the graph by invoking function`F`on the node number and metadata of each node `'foreach-edge`- returns an iterator procedure
`LAMBDA F`which iterates over the edges in the graph by invoking function`F`on each edge `'debug`- returns a list with the internal representation of the graph