ocaml-containers/3.2/containers-data/CCKTree/index.html
2021-02-01 10:58:00 -05:00

15 lines
No EOL
12 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"><head><title>CCKTree (containers-data.CCKTree)</title><link rel="stylesheet" href="../../odoc.css"/><meta charset="utf-8"/><meta name="generator" content="odoc 1.5.2"/><meta name="viewport" content="width=device-width,initial-scale=1.0"/><script src="../../highlight.pack.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div class="content"><header><nav><a href="../index.html">Up</a> <a href="../index.html">containers-data</a> &#x00BB; CCKTree</nav><h1>Module <code>CCKTree</code></h1><h2 id="lazy-tree-structure"><a href="#lazy-tree-structure" class="anchor"></a>Lazy Tree Structure</h2><p>This structure can be used to represent trees and directed graphs (as infinite trees) in a lazy fashion. Like <code>CCKList</code>, it is a structural type.</p><nav class="toc"><ul><li><a href="#basics">Basics</a></li><li><a href="#graph-traversals">Graph Traversals</a></li><li><a href="#pretty-printing">Pretty-printing</a></li><li><a href="#pretty-printing-in-the-dot-(graphviz)-format">Pretty printing in the DOT (graphviz) format</a></li></ul></nav></header><dl><dt class="spec type" id="type-iter"><a href="#type-iter" class="anchor"></a><code><span class="keyword">type</span> <span>'a iter</span></code><code> = <span>(<span class="type-var">'a</span> <span>&#45;&gt;</span> unit)</span> <span>&#45;&gt;</span> unit</code></dt><dt class="spec type" id="type-gen"><a href="#type-gen" class="anchor"></a><code><span class="keyword">type</span> <span>'a gen</span></code><code> = unit <span>&#45;&gt;</span> <span><span class="type-var">'a</span> option</span></code></dt><dt class="spec type" id="type-printer"><a href="#type-printer" class="anchor"></a><code><span class="keyword">type</span> <span>'a printer</span></code><code> = Stdlib.Format.formatter <span>&#45;&gt;</span> <span class="type-var">'a</span> <span>&#45;&gt;</span> unit</code></dt></dl><section><header><h3 id="basics"><a href="#basics" class="anchor"></a>Basics</h3></header><dl><dt class="spec type" id="type-t"><a href="#type-t" class="anchor"></a><code><span class="keyword">type</span> <span>+'a t</span></code><code> = unit <span>&#45;&gt;</span> <span>[ `Nil <span><span>| `Node</span> of <span class="type-var">'a</span> * <span><span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span> list</span></span> ]</span></code></dt></dl><dl><dt class="spec value" id="val-empty"><a href="#val-empty" class="anchor"></a><code><span class="keyword">val</span> empty : <span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span></code></dt><dt class="spec value" id="val-is_empty"><a href="#val-is_empty" class="anchor"></a><code><span class="keyword">val</span> is_empty : <span><span class="type-var">_</span> <a href="index.html#type-t">t</a></span> <span>&#45;&gt;</span> bool</code></dt><dt class="spec value" id="val-singleton"><a href="#val-singleton" class="anchor"></a><code><span class="keyword">val</span> singleton : <span class="type-var">'a</span> <span>&#45;&gt;</span> <span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span></code></dt><dd><p>Tree with only one label.</p></dd></dl><dl><dt class="spec value" id="val-node"><a href="#val-node" class="anchor"></a><code><span class="keyword">val</span> node : <span class="type-var">'a</span> <span>&#45;&gt;</span> <span><span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span> list</span> <span>&#45;&gt;</span> <span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span></code></dt><dd><p>Build a node from a label and a list of children.</p></dd></dl><dl><dt class="spec value" id="val-node1"><a href="#val-node1" class="anchor"></a><code><span class="keyword">val</span> node1 : <span class="type-var">'a</span> <span>&#45;&gt;</span> <span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span> <span>&#45;&gt;</span> <span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span></code></dt><dd><p>Node with one child.</p></dd></dl><dl><dt class="spec value" id="val-node2"><a href="#val-node2" class="anchor"></a><code><span class="keyword">val</span> node2 : <span class="type-var">'a</span> <span>&#45;&gt;</span> <span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span> <span>&#45;&gt;</span> <span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span> <span>&#45;&gt;</span> <span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span></code></dt><dd><p>Node with two children.</p></dd></dl><dl><dt class="spec value" id="val-fold"><a href="#val-fold" class="anchor"></a><code><span class="keyword">val</span> fold : <span>(<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span> <span>&#45;&gt;</span> <span class="type-var">'a</span>)</span> <span>&#45;&gt;</span> <span class="type-var">'a</span> <span>&#45;&gt;</span> <span><span class="type-var">'b</span> <a href="index.html#type-t">t</a></span> <span>&#45;&gt;</span> <span class="type-var">'a</span></code></dt><dd><p>Fold on values in no specified order. May not terminate if the tree is infinite.</p></dd></dl><dl><dt class="spec value" id="val-iter"><a href="#val-iter" class="anchor"></a><code><span class="keyword">val</span> iter : <span>(<span class="type-var">'a</span> <span>&#45;&gt;</span> unit)</span> <span>&#45;&gt;</span> <span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span> <span>&#45;&gt;</span> unit</code></dt><dt class="spec value" id="val-size"><a href="#val-size" class="anchor"></a><code><span class="keyword">val</span> size : <span><span class="type-var">_</span> <a href="index.html#type-t">t</a></span> <span>&#45;&gt;</span> int</code></dt><dd><p>Number of elements.</p></dd></dl><dl><dt class="spec value" id="val-height"><a href="#val-height" class="anchor"></a><code><span class="keyword">val</span> height : <span><span class="type-var">_</span> <a href="index.html#type-t">t</a></span> <span>&#45;&gt;</span> int</code></dt><dd><p>Length of the longest path to empty leaves.</p></dd></dl><dl><dt class="spec value" id="val-map"><a href="#val-map" class="anchor"></a><code><span class="keyword">val</span> map : <span>(<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span>)</span> <span>&#45;&gt;</span> <span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span> <span>&#45;&gt;</span> <span><span class="type-var">'b</span> <a href="index.html#type-t">t</a></span></code></dt><dt class="spec value" id="val-(&gt;|=)"><a href="#val-(&gt;|=)" class="anchor"></a><code><span class="keyword">val</span> (&gt;|=) : <span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span> <span>&#45;&gt;</span> <span>(<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'b</span>)</span> <span>&#45;&gt;</span> <span><span class="type-var">'b</span> <a href="index.html#type-t">t</a></span></code></dt><dt class="spec value" id="val-cut_depth"><a href="#val-cut_depth" class="anchor"></a><code><span class="keyword">val</span> cut_depth : int <span>&#45;&gt;</span> <span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span> <span>&#45;&gt;</span> <span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span></code></dt><dd><p>Cut the tree at the given depth, so it becomes finite.</p></dd></dl></section><section><header><h3 id="graph-traversals"><a href="#graph-traversals" class="anchor"></a>Graph Traversals</h3></header><dl><dt class="spec class-type" id="class-type-pset"><a href="#class-type-pset" class="anchor"></a><code><span class="keyword">class</span> <span class="keyword">type</span> 'a <a href="class-type-pset/index.html">pset</a> = <span class="keyword">object</span> ... <span class="keyword">end</span></code></dt><dd><p>Abstract Set structure</p></dd></dl><dl><dt class="spec value" id="val-set_of_cmp"><a href="#val-set_of_cmp" class="anchor"></a><code><span class="keyword">val</span> set_of_cmp : <span>cmp:<span>(<span class="type-var">'a</span> <span>&#45;&gt;</span> <span class="type-var">'a</span> <span>&#45;&gt;</span> int)</span></span> <span>&#45;&gt;</span> unit <span>&#45;&gt;</span> <span><span class="type-var">'a</span> <a href="class-type-pset/index.html">pset</a></span></code></dt><dd><p>Build a set structure given a total ordering.</p></dd></dl><dl><dt class="spec value" id="val-dfs"><a href="#val-dfs" class="anchor"></a><code><span class="keyword">val</span> dfs : <span>pset:<span><span class="type-var">'a</span> <a href="class-type-pset/index.html">pset</a></span></span> <span>&#45;&gt;</span> <span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span> <span>&#45;&gt;</span> <span><span>[ <span>`Enter of <span class="type-var">'a</span></span> <span><span>| `Exit</span> of <span class="type-var">'a</span></span> ]</span> Stdlib.Seq.t</span></code></dt><dd><p>Depth-first traversal of the tree.</p></dd></dl><dl><dt class="spec value" id="val-bfs"><a href="#val-bfs" class="anchor"></a><code><span class="keyword">val</span> bfs : <span>pset:<span><span class="type-var">'a</span> <a href="class-type-pset/index.html">pset</a></span></span> <span>&#45;&gt;</span> <span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span> <span>&#45;&gt;</span> <span><span class="type-var">'a</span> Stdlib.Seq.t</span></code></dt><dd><p>Breadth-first traversal of the tree.</p></dd></dl><dl><dt class="spec value" id="val-force"><a href="#val-force" class="anchor"></a><code><span class="keyword">val</span> force : <span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span> <span>&#45;&gt;</span> <span>[ `Nil <span><span>| `Node</span> of <span class="type-var">'a</span> * <span><span class="type-var">'b</span> list</span></span> ]</span> <span class="keyword">as</span> 'b</code></dt><dd><p><code>force t</code> evaluates <code>t</code> completely and returns a regular tree structure.</p><dl><dt>since</dt><dd>0.13</dd></dl></dd></dl><dl><dt class="spec value" id="val-find"><a href="#val-find" class="anchor"></a><code><span class="keyword">val</span> find : <span>pset:<span><span class="type-var">'a</span> <a href="class-type-pset/index.html">pset</a></span></span> <span>&#45;&gt;</span> <span>(<span class="type-var">'a</span> <span>&#45;&gt;</span> <span><span class="type-var">'b</span> option</span>)</span> <span>&#45;&gt;</span> <span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span> <span>&#45;&gt;</span> <span><span class="type-var">'b</span> option</span></code></dt><dd><p>Look for an element that maps to <code>Some _</code>.</p></dd></dl></section><section><header><h3 id="pretty-printing"><a href="#pretty-printing" class="anchor"></a>Pretty-printing</h3><p>Example (tree of calls for naive Fibonacci function):</p><pre><code class="ml">let mk_fib n =
let rec fib' l r i =
if i=n then r else fib' r (l+r) (i+1)
in fib' 1 1 1;;
let rec fib n = match n with
| 0 | 1 -&gt; CCKTree.singleton (`Cst n)
| _ -&gt; CCKTree.node2 (`Plus (mk_fib n)) (fib (n-1)) (fib (n-2));;
let pp_node fmt = function
| `Cst n -&gt; Format.fprintf fmt &quot;%d&quot; n
| `Plus n -&gt; Format.fprintf fmt &quot;%d&quot; n;;
Format.printf &quot;%a@.&quot; (CCKTree.pp pp_node) (fib 8);;</code></pre></header><dl><dt class="spec value" id="val-pp"><a href="#val-pp" class="anchor"></a><code><span class="keyword">val</span> pp : <span><span class="type-var">'a</span> <a href="index.html#type-printer">printer</a></span> <span>&#45;&gt;</span> <span><span><span class="type-var">'a</span> <a href="index.html#type-t">t</a></span> <a href="index.html#type-printer">printer</a></span></code></dt><dd><p>A pretty-printer using S-expressions and boxes to render the tree. Empty nodes are not rendered; sharing is ignored.</p><dl><dt>since</dt><dd>0.9</dd></dl></dd></dl></section><section><header><h3 id="pretty-printing-in-the-dot-(graphviz)-format"><a href="#pretty-printing-in-the-dot-(graphviz)-format" class="anchor"></a>Pretty printing in the DOT (graphviz) format</h3></header><div class="spec module" id="module-Dot"><a href="#module-Dot" class="anchor"></a><code><span class="keyword">module</span> <a href="Dot/index.html">Dot</a> : <span class="keyword">sig</span> ... <span class="keyword">end</span></code></div></section></div></body></html>