Lably
Skip to content

Soufflé (programming language)

  • 2 min read
  • 3 chapters

Related on Lably

Through Open source, Logic programming and Graph (discrete mathematics)

Programming examples

Given a set of edges in a graph, the following program computes the set of (directed) paths between any two nodes. This is also known as the transitive closure of the edge relation.

<span id="mwIQ"></span><span class="p" id="mwIg">.</span><span class="s s-Atom" id="mwIw">decl</span> <span class="nf" id="mwJA">edge</span><span class="p" id="mwJQ">(</span><span class="nn" id="mwJg">x</span><span class="p" id="mwJw">:</span><span class="s s-Atom" id="mwKA">number</span><span class="p" id="mwKQ">,</span> <span class="nn" id="mwKg">y</span><span class="p" id="mwKw">:</span><span class="s s-Atom" id="mwLA">number</span><span class="p" id="mwLQ">)</span> <span class="p" id="mwLg">.</span><span class="s s-Atom" id="mwLw">input</span> <span class="s s-Atom" id="mwMA">edge</span> <span class="p" id="mwMQ">.</span><span class="s s-Atom" id="mwMg">decl</span> <span class="nf" id="mwMw">path</span><span class="p" id="mwNA">(</span><span class="nn" id="mwNQ">x</span><span class="p" id="mwNg">:</span><span class="s s-Atom" id="mwNw">number</span><span class="p" id="mwOA">,</span> <span class="nn" id="mwOQ">y</span><span class="p" id="mwOg">:</span><span class="s s-Atom" id="mwOw">number</span><span class="p" id="mwPA">)</span> <span class="p" id="mwPQ">.</span><span class="s s-Atom" id="mwPg">output</span> <span class="s s-Atom" id="mwPw">path</span> <span class="nf" id="mwQA">path</span><span class="p" id="mwQQ">(</span><span class="s s-Atom" id="mwQg">x</span><span class="p" id="mwQw">,</span> <span class="s s-Atom" id="mwRA">y</span><span class="p" id="mwRQ">)</span> <span class="p" id="mwRg">:-</span> <span class="nf" id="mwRw">edge</span><span class="p" id="mwSA">(</span><span class="s s-Atom" id="mwSQ">x</span><span class="p" id="mwSg">,</span> <span class="s s-Atom" id="mwSw">y</span><span class="p" id="mwTA">).</span> <span class="nf" id="mwTQ">path</span><span class="p" id="mwTg">(</span><span class="s s-Atom" id="mwTw">x</span><span class="p" id="mwUA">,</span> <span class="s s-Atom" id="mwUQ">y</span><span class="p" id="mwUg">)</span> <span class="p" id="mwUw">:-</span> <span class="nf" id="mwVA">path</span><span class="p" id="mwVQ">(</span><span class="s s-Atom" id="mwVg">x</span><span class="p" id="mwVw">,</span> <span class="s s-Atom" id="mwWA">z</span><span class="p" id="mwWQ">),</span> <span class="nf" id="mwWg">edge</span><span class="p" id="mwWw">(</span><span class="s s-Atom" id="mwXA">z</span><span class="p" id="mwXQ">,</span> <span class="s s-Atom" id="mwXg">y</span><span class="p" id="mwXw">).</span>

Sign in to keep reading

2 more chapters are free with a Lably account.

More in Computing and communication