`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 yasos object supports the following operations:

`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!`- 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!`- 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!`- procedure
`LAMBDA N`which removes node`N`and all its edges from the graph `nodes`- returns a list with the nodes of the graph and their metadata
`edges`- returns a list with the edges of the graph and their metadata
`roots`- returns a list with all nodes in the graph that do not have an predecessor
`terminals`- which returns a list with all nodes in the graph that do not have a successor
`order`- returns the number of nodes in the graph
`size`- returns the number of edges in the graph
`capacity`- returns the size of the underlying dynamic vector
`succ`- procedure
`LAMBDA N`which returns a list with the successor nodes of node`N` `pred`- procedure
`LAMBDA N`which returns a list with the predecessor nodes of node`N` `succ-list`- returns a list containing the successor nodes for each node.
`pred-list`- returns a list containing the predecessor nodes for each node.
`out-edges`- procedure
`LAMBDA N`which returns a list with the outgoing edges of node`N` `in-edges`- procedure
`LAMBDA N`which returns a list with the incoming edges of node`N` `has-edge`- procedure
`LAMBDA I J`which returns true if edge`I -> J`exists in the graph and false otherwise `has-node`- procedure
`LAMBDA N`which returns true if node`N`exists in the graph and false otherwise `node-info`- procedure
`LAMBDA N`which returns the metadata for node`N` `node-info-set!`- procedure
`LAMBDA N V`which sets the metadata for node`N` `foreach-node`- 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`- procedure
`LAMBDA F`which iterates over the edges in the graph by invoking function`F`on each edge