|
|
|
@@ -541,34 +541,39 @@ pre.rouge .ss {
|
|
|
|
|
</li>
|
|
|
|
|
<li><a href="#_data_types">2. Data types</a>
|
|
|
|
|
<ul class="sectlevel2">
|
|
|
|
|
<li><a href="#_numbers">2.1. Numbers</a></li>
|
|
|
|
|
<li><a href="#_fractions">2.2. Fractions</a></li>
|
|
|
|
|
<li><a href="#_strings">2.3. Strings</a></li>
|
|
|
|
|
<li><a href="#_boolean">2.4. Boolean</a></li>
|
|
|
|
|
<li><a href="#_lists">2.5. Lists</a></li>
|
|
|
|
|
<li><a href="#_numbers">2.1. Numbers</a>
|
|
|
|
|
<ul class="sectlevel3">
|
|
|
|
|
<li><a href="#_integers">2.1.1. Integers</a></li>
|
|
|
|
|
<li><a href="#_floats">2.1.2. Floats</a></li>
|
|
|
|
|
<li><a href="#_fractions">2.1.3. Fractions</a></li>
|
|
|
|
|
</ul>
|
|
|
|
|
</li>
|
|
|
|
|
<li><a href="#_dictionaries">3. Dictionaries</a></li>
|
|
|
|
|
<li><a href="#_variables">4. Variables</a></li>
|
|
|
|
|
<li><a href="#_other_operations">5. Other operations</a>
|
|
|
|
|
<ul class="sectlevel2">
|
|
|
|
|
<li><a href="#_operator">5.1. <code class="blue">;</code> operator</a></li>
|
|
|
|
|
<li><a href="#_but_operator">5.2. <code class="blue">but</code> operator</a></li>
|
|
|
|
|
<li><a href="#_assignment_operator">5.3. Assignment operator <code class="blue">=</code></a></li>
|
|
|
|
|
<li><a href="#_selector_operator">5.4. Selector operator <code class="blue">? : ::</code></a></li>
|
|
|
|
|
<li><a href="#_strings">2.2. Strings</a></li>
|
|
|
|
|
<li><a href="#_booleans">2.3. Booleans</a></li>
|
|
|
|
|
<li><a href="#_lists">2.4. Lists</a></li>
|
|
|
|
|
<li><a href="#_dictionaries">2.5. Dictionaries</a></li>
|
|
|
|
|
</ul>
|
|
|
|
|
</li>
|
|
|
|
|
<li><a href="#_priorities_of_operators">6. Priorities of operators</a></li>
|
|
|
|
|
<li><a href="#_functions">7. Functions</a>
|
|
|
|
|
<li><a href="#_variables">3. Variables</a></li>
|
|
|
|
|
<li><a href="#_other_operations">4. Other operations</a>
|
|
|
|
|
<ul class="sectlevel2">
|
|
|
|
|
<li><a href="#_function_calls">7.1. Function calls</a></li>
|
|
|
|
|
<li><a href="#_function_definitions">7.2. Function definitions</a></li>
|
|
|
|
|
<li><a href="#_operator">4.1. <code class="blue">;</code> operator</a></li>
|
|
|
|
|
<li><a href="#_but_operator">4.2. <code class="blue">but</code> operator</a></li>
|
|
|
|
|
<li><a href="#_assignment_operator">4.3. Assignment operator <code class="blue">=</code></a></li>
|
|
|
|
|
<li><a href="#_selector_operator">4.4. Selector operator <code class="blue">? : ::</code></a></li>
|
|
|
|
|
</ul>
|
|
|
|
|
</li>
|
|
|
|
|
<li><a href="#_builtins">8. Builtins</a>
|
|
|
|
|
<li><a href="#_priorities_of_operators">5. Priorities of operators</a></li>
|
|
|
|
|
<li><a href="#_functions">6. Functions</a>
|
|
|
|
|
<ul class="sectlevel2">
|
|
|
|
|
<li><a href="#_builtin_functions">8.1. Builtin functions</a></li>
|
|
|
|
|
<li><a href="#_import">8.2. <em class="blue">import()</em></a></li>
|
|
|
|
|
<li><a href="#_function_calls">6.1. Function calls</a></li>
|
|
|
|
|
<li><a href="#_function_definitions">6.2. Function definitions</a></li>
|
|
|
|
|
</ul>
|
|
|
|
|
</li>
|
|
|
|
|
<li><a href="#_builtins">7. Builtins</a>
|
|
|
|
|
<ul class="sectlevel2">
|
|
|
|
|
<li><a href="#_builtin_functions">7.1. Builtin functions</a></li>
|
|
|
|
|
<li><a href="#_import">7.2. <em class="blue">import()</em></a></li>
|
|
|
|
|
</ul>
|
|
|
|
|
</li>
|
|
|
|
|
</ul>
|
|
|
|
@@ -579,7 +584,7 @@ pre.rouge .ss {
|
|
|
|
|
<div class="sectionbody">
|
|
|
|
|
<!-- toc disabled -->
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<p><mark>TODO: Work in progress (last update on 2024/05/10, 06:52 a.m.)</mark></p>
|
|
|
|
|
<p><mark>TODO: Work in progress (last update on 2024/05/17, 7:30 a.m.)</mark></p>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
@@ -603,10 +608,10 @@ pre.rouge .ss {
|
|
|
|
|
<div class="sect2">
|
|
|
|
|
<h3 id="_dev_expr_test_tool"><a class="anchor" href="#_dev_expr_test_tool"></a><a class="link" href="#_dev_expr_test_tool">1.2. <code>dev-expr</code> test tool</a></h3>
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<p><code>dev-expr</code> is a simple program that can be used to evaluate expressions interactively. As its name suggests, it was created for testing purpose. In fact, beyond in additon to the automatic test suite based on the Go test framework, <code>dev-expr</code> provides an important aid for quickly testing of new features during their development.</p>
|
|
|
|
|
<p><code>dev-expr</code> is a simple program that can be used to evaluate expressions interactively. As its name suggests, it was created for testing purpose. In fact, in additon to the automatic verification test suite based on the Go test framework, <code>dev-expr</code> provides an important aid for quickly testing of new features during their development.</p>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<p>It cat work as a <em>REPL</em>, <em><strong>R</strong>ead-<strong>E</strong>xecute-<strong>P</strong>rint-<strong>L</strong>oop</em>, or it can process expression acquired from files or standard input.</p>
|
|
|
|
|
<p><code>dev-expr</code> can work as a <em>REPL</em>, <em><strong>R</strong>ead-<strong>E</strong>xecute-<strong>P</strong>rint-<strong>L</strong>oop</em>, or it can process expression acquired from files or standard input.</p>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<p>The program can be downloaded from <a href="https://git.portale-stac.it/go-pkg/-/packages/generic/dev-expr/">dev-expr</a>.</p>
|
|
|
|
@@ -617,21 +622,23 @@ pre.rouge .ss {
|
|
|
|
|
<div class="listingblock">
|
|
|
|
|
<div class="title">Run <code>dev-expr</code> in REPL mode and ask for help</div>
|
|
|
|
|
<div class="content">
|
|
|
|
|
<pre class="rouge highlight"><code data-lang="shell"><span class="c"># Assume the expr source directory. Type 'exit' or Ctrl+D to quit the program.</span>
|
|
|
|
|
<pre class="rouge highlight"><code data-lang="shell"><span class="c"># Type 'exit' or Ctrl+D to quit the program.</span>
|
|
|
|
|
|
|
|
|
|
<span class="o">[</span>user]<span class="nv">$ </span>tools/expr <span class="nt">--</span> Expressions calculator v1.7.0,2024/05/08 <span class="o">(</span>celestino.amoroso@portale-stac.it<span class="o">)</span>
|
|
|
|
|
Type <span class="nb">help </span>to get the list of command.
|
|
|
|
|
<span class="o">[</span>user]<span class="nv">$ </span>./dev-expr
|
|
|
|
|
<span class="nb">expr</span> <span class="nt">--</span> Expressions calculator v1.7.1<span class="o">(</span>build 2<span class="o">)</span>,2024/05/16 <span class="o">(</span>celestino.amoroso@portale-stac.it<span class="o">)</span>
|
|
|
|
|
Based on the Expr package v0.10.0
|
|
|
|
|
Type <span class="nb">help </span>to get the list of available commands
|
|
|
|
|
See also https://git.portale-stac.it/go-pkg/expr/src/branch/main/README.adoc
|
|
|
|
|
|
|
|
|
|
<span class="o">>>></span> <span class="nb">help</span>
|
|
|
|
|
<span class="nt">---</span> REPL commands:
|
|
|
|
|
<span class="nb">source</span> <span class="nt">--</span> Load a file as input
|
|
|
|
|
<span class="nb">tty</span> <span class="nt">--</span> Enable/Disable ansi output <i class="conum" data-value="1"></i><b>(1)</b>
|
|
|
|
|
base <span class="nt">--</span> Set the integer output base: 2, 8, 10, or 16
|
|
|
|
|
<span class="nb">exit</span> <span class="nt">--</span> Exit the program
|
|
|
|
|
<span class="nb">help</span> <span class="nt">--</span> Show <span class="nb">command </span>list
|
|
|
|
|
ml <span class="nt">--</span> Enable/Disable multi-line output
|
|
|
|
|
mods <span class="nt">--</span> List <span class="nb">builtin </span>modules
|
|
|
|
|
<span class="nb">source</span> <span class="nt">--</span> Load a file as input
|
|
|
|
|
<span class="nb">tty</span> <span class="nt">--</span> Enable/Disable ansi output <i class="conum" data-value="1"></i><b>(1)</b>
|
|
|
|
|
|
|
|
|
|
<span class="nt">---</span> Command line options:
|
|
|
|
|
<span class="nt">-b</span> <<span class="nb">builtin</span><span class="o">></span> Import <span class="nb">builtin </span>modules.
|
|
|
|
@@ -662,9 +669,12 @@ pre.rouge .ss {
|
|
|
|
|
<div class="listingblock">
|
|
|
|
|
<div class="title">REPL examples</div>
|
|
|
|
|
<div class="content">
|
|
|
|
|
<pre class="rouge highlight"><code data-lang="shell"><span class="o">[</span>user]<span class="nv">$ </span>tools/expr <span class="nt">--</span> Expressions calculator v1.6.1,2024/05/06 <span class="o">(</span>celestino.amoroso@portale-stac.it<span class="o">)</span>
|
|
|
|
|
Type <span class="nb">help </span>to get the list of command.
|
|
|
|
|
<pre class="rouge highlight"><code data-lang="shell"><span class="o">[</span>user]<span class="nv">$ </span>./dev-expr
|
|
|
|
|
<span class="nb">expr</span> <span class="nt">--</span> Expressions calculator v1.7.1<span class="o">(</span>build 2<span class="o">)</span>,2024/05/16 <span class="o">(</span>celestino.amoroso@portale-stac.it<span class="o">)</span>
|
|
|
|
|
Based on the Expr package v0.10.0
|
|
|
|
|
Type <span class="nb">help </span>to get the list of available commands
|
|
|
|
|
See also https://git.portale-stac.it/go-pkg/expr/src/branch/main/README.adoc
|
|
|
|
|
|
|
|
|
|
<span class="o">>>></span> 2+3
|
|
|
|
|
5
|
|
|
|
|
<span class="o">>>></span> 2+3<span class="k">*</span><span class="o">(</span>4-1.5<span class="o">)</span>
|
|
|
|
@@ -721,7 +731,49 @@ pre.rouge .ss {
|
|
|
|
|
<div class="sect2">
|
|
|
|
|
<h3 id="_numbers"><a class="anchor" href="#_numbers"></a><a class="link" href="#_numbers">2.1. Numbers</a></h3>
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<p>Numbers can be integers (GO int64) or float (GO float64). In mixed operations involving integers and floats, integers are automatically promoted to floats.</p>
|
|
|
|
|
<p><em>Expr</em> supports three type of numbers:</p>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="olist arabic">
|
|
|
|
|
<ol class="arabic">
|
|
|
|
|
<li>
|
|
|
|
|
<p><span class="blue">Integers</span></p>
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
<p><span class="blue">Floats</span></p>
|
|
|
|
|
</li>
|
|
|
|
|
<li>
|
|
|
|
|
<p><span class="blue">Factions</span> internally are stored as <em>pairs of</em> Golang <em>int64</em> values.</p>
|
|
|
|
|
</li>
|
|
|
|
|
</ol>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<p>In mixed operations involving integers, fractions and floats, automatic type promotion to the largest type take place.</p>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="sect3">
|
|
|
|
|
<h4 id="_integers"><a class="anchor" href="#_integers"></a><a class="link" href="#_integers">2.1.1. Integers</a></h4>
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<p><em>Expr</em>'s integers are a subset of the integer set. Internally they are stored as Golang <em>int64</em> values.</p>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="exampleblock">
|
|
|
|
|
<div class="title">Example 1. Integer literal syntax</div>
|
|
|
|
|
<div class="content">
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<p><strong><em>integer</em></strong> = [<em>sign</em>] <em>digit-seq</em><br>
|
|
|
|
|
<em>sign</em> = "<strong>+</strong>" | "<strong>-</strong>"<br>
|
|
|
|
|
<em>digit-seq</em> = <em>dec-seq</em> | <em>bin-seq</em> | <em>oct-seq</em> | <em>hex-seq</em><br>
|
|
|
|
|
<em>dec-seq</em> = {<em>dec-digit</em>}<br>
|
|
|
|
|
<em>dec-digit</em> = "<strong>0</strong>"|"<strong>1</strong>"|…​|"<strong>9</strong>"<br>
|
|
|
|
|
<em>bin-seq</em> = "<strong>0b</strong>"{<em>bin-digit</em>}<br>
|
|
|
|
|
<em>bin-digit</em> = "<strong>0</strong>"|"<strong>1</strong>"<br>
|
|
|
|
|
<em>oct-seq</em> = "<strong>0o</strong>"{<em>oct-digit</em>}<br>
|
|
|
|
|
<em>oct-digit</em> = "<strong>0</strong>"|"<strong>1</strong>"|…​|"<strong>7</strong>"<br>
|
|
|
|
|
<em>hex-seq</em> = "<strong>0x</strong>"{<em>hex-digit</em>}<br>
|
|
|
|
|
<em>hex-digit</em> = "<strong>0</strong>"|"<strong>1</strong>"|…​|"<strong>9</strong>"|"<strong>a</strong>"|…​|"<strong>z</strong>"|"<strong>A</strong>"|…​|"<strong>Z</strong>"</p>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<p>Value range: <strong>-9223372036854775808</strong> to <strong>9223372036854775807</strong></p>
|
|
|
|
|
</div>
|
|
|
|
|
<table class="tableblock frame-all grid-all stretch">
|
|
|
|
|
<caption class="title">Table 1. Arithmetic operators</caption>
|
|
|
|
@@ -731,87 +783,162 @@ pre.rouge .ss {
|
|
|
|
|
<col style="width: 46.1538%;">
|
|
|
|
|
<col style="width: 30.7693%;">
|
|
|
|
|
</colgroup>
|
|
|
|
|
<thead>
|
|
|
|
|
<tr>
|
|
|
|
|
<th class="tableblock halign-center valign-top">Symbol</th>
|
|
|
|
|
<th class="tableblock halign-center valign-top">Operation</th>
|
|
|
|
|
<th class="tableblock halign-left valign-top">Description</th>
|
|
|
|
|
<th class="tableblock halign-left valign-top">Examples</th>
|
|
|
|
|
</tr>
|
|
|
|
|
</thead>
|
|
|
|
|
<tbody>
|
|
|
|
|
<tr>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><code class="blue">+</code> / <code class="blue">-</code></p></td>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><em>change sign</em></p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Change the sign of values</p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code class="blue">-1</code> <em>[-1]</em><br>
|
|
|
|
|
<code class="blue">-(+2)</code> <em>[-2]</em></p></td>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock">Symbol</p></td>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock">Operation</p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Examples</p></td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><code class="blue">+</code></p></td>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><em>sum</em></p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Add two values</p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code class="blue">-1 + 2</code> <em>[1]</em><br>
|
|
|
|
|
<code class="blue">4 + 0.5</code> <em>[4.5]</em></p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code class="blue">-1 + 2</code> → 1</p></td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><code class="blue">-</code></p></td>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><em>subtraction</em></p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Subtract the right value from the left one</p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code class="blue">3 - 1</code> <em>[2]</em><br>
|
|
|
|
|
<code class="blue">4 - 0.5</code> <em>[3.5]</em></p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code class="blue">3 - 1</code> → 2</p></td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><code class="blue">*</code></p></td>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><em>product</em></p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Multiply two values</p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code>-1 * 2</code> <em>[-2]</em><br>
|
|
|
|
|
<code class="blue">4 * 0.5</code> <em>[2.0]</em></p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code class="blue">-1 * 2</code> → -2</p></td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><code class="blue">/</code></p></td>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><em>Division</em></p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Divide the left value by the right one</p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code class="blue">-1 / 2</code> <em>[0]</em><br>
|
|
|
|
|
<code class="blue">1.0 / 2</code> <em>[0.5]</em></p></td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><code class="blue">./</code></p></td>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><em>Float division</em></p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Force float division</p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code class="blue">-1 ./ 2</code> <em>[-0.5]</em></p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Divide the left value by the right one<sup>(*)</sup></p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code class="blue">-10 / 2</code> → 5</p></td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><code class="blue">%</code></p></td>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><em>Modulo</em></p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Remainder of the integer division</p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code class="blue">5 % 2</code> <em>[1]</em></p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code class="blue">5 % 2</code> → 1</p></td>
|
|
|
|
|
</tr>
|
|
|
|
|
</tbody>
|
|
|
|
|
</table>
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<p><sup>(*)</sup> See also the <em>float division</em> <code class="blue">./</code> below.</p>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="sect3">
|
|
|
|
|
<h4 id="_floats"><a class="anchor" href="#_floats"></a><a class="link" href="#_floats">2.1.2. Floats</a></h4>
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<p><em>Expr</em>'s floats are a subset of the rational number set. Note that they can’t hold the exact value of an unlimited number; floats can only approximate them. Internally floats are stored as Golang’s <em>float64</em> values.</p>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="exampleblock">
|
|
|
|
|
<div class="title">Example 2. Float literal syntax</div>
|
|
|
|
|
<div class="content">
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<p><strong><em>float</em></strong> = [<em>sign</em>] <em>dec-seq</em> "<strong>.</strong>" [<em>dec-seq</em>] [("<strong>e</strong>"|"<strong>E</strong>") [<em>sign</em>] <em>dec-seq</em>]<br>
|
|
|
|
|
<em>sign</em> = "<strong>+</strong>" | "<strong>-</strong>"<br>
|
|
|
|
|
<em>dec-seq</em> = <em>see-integer-literal-syntax</em></p>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<div class="title">Examples</div>
|
|
|
|
|
<p><code>>>></code> <code class="blue">1.0</code><br>
|
|
|
|
|
<code class="green">1</code><br>
|
|
|
|
|
<code>>>></code> <code class="blue">0.123</code><br>
|
|
|
|
|
<code class="green">0.123</code><br>
|
|
|
|
|
<code>>>></code> <code class="blue">4.5e+3</code><br>
|
|
|
|
|
<code class="green">4500</code><br>
|
|
|
|
|
<code>>>></code> <code class="blue">4.5E-33</code><br>
|
|
|
|
|
<code class="green">4.5e-33</code><br>
|
|
|
|
|
<code>>>></code> <code class="blue">4.5E-3</code><br>
|
|
|
|
|
<code class="green">0.0045</code><br>
|
|
|
|
|
<code>>>></code> <code class="blue">4.5E10</code><br>
|
|
|
|
|
<code class="green">4.5e+10</code><br></p>
|
|
|
|
|
</div>
|
|
|
|
|
<table class="tableblock frame-all grid-all stretch">
|
|
|
|
|
<caption class="title">Table 2. Arithmetic operators</caption>
|
|
|
|
|
<colgroup>
|
|
|
|
|
<col style="width: 7.6923%;">
|
|
|
|
|
<col style="width: 15.3846%;">
|
|
|
|
|
<col style="width: 46.1538%;">
|
|
|
|
|
<col style="width: 30.7693%;">
|
|
|
|
|
</colgroup>
|
|
|
|
|
<tbody>
|
|
|
|
|
<tr>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock">Symbol</p></td>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock">Operation</p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Description</p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Examples</p></td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><code class="blue">+</code></p></td>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><em>sum</em></p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Add two values</p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code class="blue">4 + 0.5</code> → 4.5</p></td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><code class="blue">-</code></p></td>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><em>subtraction</em></p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Subtract the right value from the left one</p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code class="blue">4 - 0.5</code> → 3.5</p></td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><code class="blue">*</code></p></td>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><em>product</em></p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Multiply two values</p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code class="blue">4 * 0.5</code> → 2.0</p></td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><code class="blue">/</code></p></td>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><em>Division</em></p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Divide the left value by the right one</p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code class="blue">1.0 / 2</code> → 0.5</p></td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><code class="blue">./</code></p></td>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><em>Float division</em></p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Force float division</p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code class="blue">-1 ./ 2</code> → -0.5</p></td>
|
|
|
|
|
</tr>
|
|
|
|
|
</tbody>
|
|
|
|
|
</table>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="sect2">
|
|
|
|
|
<h3 id="_fractions"><a class="anchor" href="#_fractions"></a><a class="link" href="#_fractions">2.2. Fractions</a></h3>
|
|
|
|
|
<div class="sect3">
|
|
|
|
|
<h4 id="_fractions"><a class="anchor" href="#_fractions"></a><a class="link" href="#_fractions">2.1.3. Fractions</a></h4>
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<p><em>Expr</em> also supports fractions. Fraction literals are made with two integers separated by a vertical bar <code>|</code>.</p>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="exampleblock">
|
|
|
|
|
<div class="title">Example 3. Fraction literal syntax</div>
|
|
|
|
|
<div class="content">
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<p><strong><em>fraction</em></strong> = [<em>sign</em>] (<em>num-den-spec</em> | <em>float-spec</em>)<br>
|
|
|
|
|
<em>sign</em> = "<strong>+</strong>" | "<strong>-</strong>"<br>
|
|
|
|
|
<em>num-den-spec</em> = <em>digit-seq</em> "<strong>|</strong>" <em>digit-seq</em><br>
|
|
|
|
|
<em>float-spec</em> = <em>dec-seq</em> "<strong>.</strong>" [<em>dec-seq</em>] "<strong>(</strong>" <em>dec-seq</em> "<strong>)</strong>"<br>
|
|
|
|
|
<em>dec-seq</em> = <em>see-integer-literal-syntax</em><br>
|
|
|
|
|
<em>digit-seq</em> = <em>see-integer-literal-syntax</em><br></p>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<div class="title">Examples</div>
|
|
|
|
|
<p><code>>>></code> <code class="blue">1 | 2</code><br>
|
|
|
|
|
<code class="green">1|2</code><br>
|
|
|
|
|
<code>>>></code> <code class="blue">4|6</code><br>
|
|
|
|
|
<code class="green">2|3</code> <em class="gray">Fractions are always reduced to their lowest terms</em><br>
|
|
|
|
|
<code>>>></code> <code class="blue">4|6</code> <em class="gray">// Fractions are always reduced to their lowest terms</em><br>
|
|
|
|
|
<code class="green">2|3</code><br>
|
|
|
|
|
<code>>>></code> <code class="blue">1|2 + 2|3</code><br>
|
|
|
|
|
<code class="green">7|6</code><br>
|
|
|
|
|
<code>>>></code> <code class="blue">1|2 * 2|3</code><br>
|
|
|
|
|
<code class="green">1|3</code><br>
|
|
|
|
|
<code>>>></code> <code class="blue">1|2 / 1|3</code><br>
|
|
|
|
|
<code class="green">3|2</code><br>
|
|
|
|
|
<code>>>></code> <code class="blue">1|2 ./ 1|3</code> <em class="gray">Force decimal division</em><br>
|
|
|
|
|
<code>>>></code> <code class="blue">1|2 ./ 1|3</code> <em class="gray">// Force decimal division</em><br>
|
|
|
|
|
<code class="green">1.5</code><br>
|
|
|
|
|
<code>>>></code> <code class="blue">-1|2</code><br>
|
|
|
|
|
<code class="green">-1|2</code><br>
|
|
|
|
|
<code>>>></code> <code class="blue">1|-2</code> <em class="gray">Wrong sign specification</em><br>
|
|
|
|
|
<code>>>></code> <code class="blue">1|-2</code> <em class="gray">// Invalid sign specification</em><br>
|
|
|
|
|
<em class="red">Eval Error: [1:3] infix operator "|" requires two non-nil operands, got 1</em><br>
|
|
|
|
|
<code>>>></code> <code class="blue">1|(-2)</code><br>
|
|
|
|
|
<code class="green">-1|2</code></p>
|
|
|
|
@@ -820,6 +947,7 @@ pre.rouge .ss {
|
|
|
|
|
<p>Fractions can be used together with integers and floats in expressions.</p>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<div class="title">Examples</div>
|
|
|
|
|
<p><code>>>></code> <code class="blue">1|2 + 5</code><br>
|
|
|
|
|
<code class="green">11|2</code><br>
|
|
|
|
|
<code>>>></code> <code class="blue">4 - 1|2</code><br>
|
|
|
|
@@ -828,16 +956,29 @@ pre.rouge .ss {
|
|
|
|
|
<code class="green">1.5</code><br></p>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="sect2">
|
|
|
|
|
<h3 id="_strings"><a class="anchor" href="#_strings"></a><a class="link" href="#_strings">2.3. Strings</a></h3>
|
|
|
|
|
<h3 id="_strings"><a class="anchor" href="#_strings"></a><a class="link" href="#_strings">2.2. Strings</a></h3>
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<p>Strings are character sequences enclosed between two double quote <code class="blue">"</code>. Example: <code class="blue">"I’m a string"</code>.</p>
|
|
|
|
|
<p>Strings are character sequences enclosed between two double quote <code class="blue">"</code>.</p>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<div class="title">Examples</div>
|
|
|
|
|
<p><code>>>></code> <code class="blue">"I’m a string"</code><br>
|
|
|
|
|
<code class="green">I’m a string</code><br>
|
|
|
|
|
<code>>>></code> <code class="blue">"123abc?!"</code><br>
|
|
|
|
|
<code class="green">123abc?!</code><br>
|
|
|
|
|
<code>>>></code> <code class="blue">"123\nabc"</code><br>
|
|
|
|
|
<code class="green">123</code><br>
|
|
|
|
|
<code class="green">abc</code><br>
|
|
|
|
|
<code>>>></code> <code class="blue">"123\tabc"</code><br>
|
|
|
|
|
<code class="green">123    abc</code></p>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<p>Some arithmetic operators can also be used with strings.</p>
|
|
|
|
|
</div>
|
|
|
|
|
<table class="tableblock frame-all grid-all stretch">
|
|
|
|
|
<caption class="title">Table 2. String operators</caption>
|
|
|
|
|
<caption class="title">Table 3. String operators</caption>
|
|
|
|
|
<colgroup>
|
|
|
|
|
<col style="width: 7.6923%;">
|
|
|
|
|
<col style="width: 15.3846%;">
|
|
|
|
@@ -871,10 +1012,12 @@ pre.rouge .ss {
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<p>The items of strings can be accessed using the dot <code>.</code> operator.</p>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="listingblock">
|
|
|
|
|
<div class="title">Item access syntax</div>
|
|
|
|
|
<div class="exampleblock">
|
|
|
|
|
<div class="title">Example 4. Item access syntax</div>
|
|
|
|
|
<div class="content">
|
|
|
|
|
<pre class="rouge highlight"><code data-lang="bnf"><item> ::= <string-expr>"."<index-expr></code></pre>
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<p><em>item</em> = <em>string-expr</em> "<strong>.</strong>" <em>integer-expr</em></p>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="paragraph">
|
|
|
|
@@ -892,12 +1035,12 @@ pre.rouge .ss {
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="sect2">
|
|
|
|
|
<h3 id="_boolean"><a class="anchor" href="#_boolean"></a><a class="link" href="#_boolean">2.4. Boolean</a></h3>
|
|
|
|
|
<h3 id="_booleans"><a class="anchor" href="#_booleans"></a><a class="link" href="#_booleans">2.3. Booleans</a></h3>
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<p>Boolean data type has two values only: <em>true</em> and <em>false</em>. Relational and Boolean expressions produce Boolean values.</p>
|
|
|
|
|
<p>Boolean data type has two values only: <em class="blue">true</em> and <em class="blue">false</em>. Relational and boolean expressions result in boolean values.</p>
|
|
|
|
|
</div>
|
|
|
|
|
<table class="tableblock frame-all grid-all stretch">
|
|
|
|
|
<caption class="title">Table 3. Relational operators</caption>
|
|
|
|
|
<caption class="title">Table 4. Relational operators</caption>
|
|
|
|
|
<colgroup>
|
|
|
|
|
<col style="width: 7.6923%;">
|
|
|
|
|
<col style="width: 15.3846%;">
|
|
|
|
@@ -917,48 +1060,48 @@ pre.rouge .ss {
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><code class="blue">==</code></p></td>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><em>Equal</em></p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock">True if the left value is equal to the right one</p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code class="blue">5 == 2</code> <em>[false]</em><br>
|
|
|
|
|
<code class="blue">"a" == "a"</code> <em>[true]</em></p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code class="blue">5 == 2</code> → <em>false</em><br>
|
|
|
|
|
<code class="blue">"a" == "a"</code> → <em>true</em></p></td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><code class="blue">!=</code></p></td>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><em>Not Equal</em></p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock">True if the left value is NOT equal to the right one</p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code class="blue">5 != 2</code> <em>[true]</em><br>
|
|
|
|
|
<code class="blue">"a" != "a"</code> <em>[false]</em></p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code class="blue">5 != 2</code> → <em>true</em><br>
|
|
|
|
|
<code class="blue">"a" != "a"</code> → <em>false</em></p></td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><code class="blue"><</code></p></td>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><em>Less</em></p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock">True if the left value is less than the right one</p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code class="blue">5 < 2</code> <em>[false]</em><br>
|
|
|
|
|
<code class="blue">"a" < "b"</code> <em>[true]</em></p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code class="blue">5 < 2</code> → <em>false</em><br>
|
|
|
|
|
<code class="blue">"a" < "b"</code> → <em>true</em></p></td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><code class="blue"><=</code></p></td>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><em>Less or Equal</em></p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock">True if the left value is less than or equal to the right one</p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code class="blue">5 <= 2</code> <em>[false]</em><br>
|
|
|
|
|
<code class="blue">"b" <= "b"</code> <em>[true]</em></p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code class="blue">5 <= 2</code> → <em>false</em><br>
|
|
|
|
|
<code class="blue">"b" <= "b"</code> → <em>true</em></p></td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><code class="blue">></code></p></td>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><em>Greater</em></p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock">True if the left value is greater than the right one</p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code class="blue">5 > 2</code> <em>[true]</em><br>
|
|
|
|
|
<code class="blue">"a" < "b"</code> <em>[false]</em></p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code class="blue">5 > 2</code> → <em>true</em><br>
|
|
|
|
|
<code class="blue">"a" < "b"</code> → <em>false</em></p></td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><code class="blue">>=</code></p></td>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><em>Greater or Equal</em></p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock">True if the left value is greater than or equal to the right one</p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code class="blue">5 >= 2</code> <em>[true]</em><br>
|
|
|
|
|
<code class="blue">"b" <= "b"</code> <em>[true]</em></p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code class="blue">5 >= 2</code> → <em>true</em><br>
|
|
|
|
|
<code class="blue">"b" <= "b"</code> → <em>true</em></p></td>
|
|
|
|
|
</tr>
|
|
|
|
|
</tbody>
|
|
|
|
|
</table>
|
|
|
|
|
<table class="tableblock frame-all grid-all stretch">
|
|
|
|
|
<caption class="title">Table 4. Boolean operators</caption>
|
|
|
|
|
<caption class="title">Table 5. Boolean operators</caption>
|
|
|
|
|
<colgroup>
|
|
|
|
|
<col style="width: 15.3846%;">
|
|
|
|
|
<col style="width: 15.3846%;">
|
|
|
|
@@ -978,22 +1121,22 @@ pre.rouge .ss {
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><code class="blue">NOT</code></p></td>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><em>Not</em></p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock">True if the right value is false</p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code class="blue">NOT true</code> <em>[false]</em><br>
|
|
|
|
|
<code class="blue">NOT (2 < 1)</code> <em>[true]</em></p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code class="blue">NOT true</code> → <em>false</em><br>
|
|
|
|
|
<code class="blue">NOT (2 < 1)</code> → <em>true</em></p></td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><code class="blue">AND</code> / <code class="blue">&&</code></p></td>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><em>And</em></p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock">True if both left and right values are true</p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code class="blue">false && true</code> <em>[false]</em><br>
|
|
|
|
|
<code class="blue">"a" < "b" AND NOT (2 < 1)</code> <em>[true]</em></p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code class="blue">false && true</code> → <em>false</em><br>
|
|
|
|
|
<code class="blue">"a" < "b" AND NOT (2 < 1)</code> → <em>true</em></p></td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><code class="blue">OR</code> / <code class="blue">||</code></p></td>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><em>Or</em></p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock">True if at least one of the left and right values integers true</p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code class="blue">false or true</code> <em>[true]</em><br>
|
|
|
|
|
<code class="blue">"a" == "b" OR (2 == 1)</code> <em>[false]</em></p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code class="blue">false or true</code> → <em>true</em><br>
|
|
|
|
|
<code class="blue">"a" == "b" OR (2 == 1)</code> → <em>false</em></p></td>
|
|
|
|
|
</tr>
|
|
|
|
|
</tbody>
|
|
|
|
|
</table>
|
|
|
|
@@ -1005,7 +1148,7 @@ pre.rouge .ss {
|
|
|
|
|
</td>
|
|
|
|
|
<td class="content">
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<p>Currently, boolean operations are evaluated using <em>short cut evaluation</em>. This means that, if the left expression of operators <code class="blue">and</code> and <code class="blue">or</code> is sufficient to establish the result of the whole operation, the right expression would not evaluated at all.</p>
|
|
|
|
|
<p>Currently, boolean operations are evaluated using <em>short cut evaluation</em>. This means that, if the left expression of the <code class="blue">and</code> and <code class="blue">or</code> operators is sufficient to establish the result of the whole operation, the right expression would not evaluated at all.</p>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="listingblock">
|
|
|
|
|
<div class="title">Example</div>
|
|
|
|
@@ -1027,22 +1170,35 @@ pre.rouge .ss {
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="sect2">
|
|
|
|
|
<h3 id="_lists"><a class="anchor" href="#_lists"></a><a class="link" href="#_lists">2.5. Lists</a></h3>
|
|
|
|
|
<h3 id="_lists"><a class="anchor" href="#_lists"></a><a class="link" href="#_lists">2.4. Lists</a></h3>
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<p><em>Expr</em> supports list of mixed-type values, also specified by normal expressions.</p>
|
|
|
|
|
<p><em>Expr</em> supports list of mixed-type values, also specified by normal expressions. Internally, <em>Expr</em>'s lists are Go arrays.</p>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="listingblock">
|
|
|
|
|
<div class="title">List examples</div>
|
|
|
|
|
<div class="exampleblock">
|
|
|
|
|
<div class="title">Example 5. List literal syntax</div>
|
|
|
|
|
<div class="content">
|
|
|
|
|
<pre class="rouge highlight"><code data-lang="go"><span class="p">[</span><span class="m">1</span><span class="p">,</span> <span class="m">2</span><span class="p">,</span> <span class="m">3</span><span class="p">]</span> <span class="c">// List of integers</span>
|
|
|
|
|
<span class="p">[</span><span class="s">"one"</span><span class="p">,</span> <span class="s">"two"</span><span class="p">,</span> <span class="s">"three"</span><span class="p">]</span> <span class="c">// List of strings</span>
|
|
|
|
|
<span class="p">[</span><span class="s">"one"</span><span class="p">,</span> <span class="m">2</span><span class="p">,</span> <span class="no">false</span><span class="p">,</span> <span class="m">4.1</span><span class="p">]</span> <span class="c">// List of mixed-types</span>
|
|
|
|
|
<span class="p">[</span><span class="s">"one"</span><span class="o">+</span><span class="m">1</span><span class="p">,</span> <span class="m">2.0</span><span class="o">*</span><span class="p">(</span><span class="m">9</span><span class="o">-</span><span class="m">2</span><span class="p">)]</span> <span class="c">// List of expressions</span>
|
|
|
|
|
<span class="p">[</span> <span class="p">[</span><span class="m">1</span><span class="p">,</span><span class="s">"one"</span><span class="p">],</span> <span class="p">[</span><span class="m">2</span><span class="p">,</span><span class="s">"two"</span><span class="p">]]</span> <span class="c">// List of lists</span></code></pre>
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<p><strong><em>list</em></strong> = <em>empty-list</em> | <em>non-empty-list</em><br>
|
|
|
|
|
<em>empty-list</em> = "<strong>[]</strong>"<br>
|
|
|
|
|
<em>non-empty-list</em> = "<strong>[</strong>" <em>any-value</em> {"<strong>,</strong>" _any-value} "<strong>]</strong>"<br></p>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<div class="title">Examples</div>
|
|
|
|
|
<p><code>>>></code> <code class="blue">[1,2,3]</code> <em class="gray">// List of integers</em><br>
|
|
|
|
|
<code class="green">[1, 2, 3]</code><br>
|
|
|
|
|
<code>>>></code> <code class="blue">["one", "two", "three"]</code> <em class="gray">// List of strings</em><br>
|
|
|
|
|
<code class="green">["one", "two", "three"]</code><br>
|
|
|
|
|
<code>>>></code> <code class="blue">["one", 2, false, 4.1]</code> <em class="gray">// List of mixed-types</em><br>
|
|
|
|
|
<code class="green">["one", 2, false, 4.1]</code><br>
|
|
|
|
|
<code>>>></code> <code class="blue">["one"+1, 2.0*(9-2)]</code> <em class="gray">// List of expressions</em><br>
|
|
|
|
|
<code class="green">["one1", 14]</code><br>
|
|
|
|
|
<code>>>></code> <code class="blue">[ [1,"one"], [2,"two"]]</code> <em class="gray">// List of lists</em><br>
|
|
|
|
|
<code class="green">[[1, "one"], [2, "two"]]</code></p>
|
|
|
|
|
</div>
|
|
|
|
|
<table class="tableblock frame-all grid-all stretch">
|
|
|
|
|
<caption class="title">Table 5. List operators</caption>
|
|
|
|
|
<caption class="title">Table 6. List operators</caption>
|
|
|
|
|
<colgroup>
|
|
|
|
|
<col style="width: 15.3846%;">
|
|
|
|
|
<col style="width: 15.3846%;">
|
|
|
|
@@ -1062,23 +1218,25 @@ pre.rouge .ss {
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><code class="blue">+</code></p></td>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><em>Join</em></p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Joins two lists</p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code class="blue">[1,2] + [3]</code> <em>[ [1,2,3] ]</em></p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code class="blue">[1,2] + [3]</code> → <em>[1,2,3]</em></p></td>
|
|
|
|
|
</tr>
|
|
|
|
|
<tr>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><code class="blue">-</code></p></td>
|
|
|
|
|
<td class="tableblock halign-center valign-top"><p class="tableblock"><em>Difference</em></p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock">Left list without elements in the right list</p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code class="blue">[1,2,3] - [2]</code> <em>[ [1,3] ]</em></p></td>
|
|
|
|
|
<td class="tableblock halign-left valign-top"><p class="tableblock"><code class="blue">[1,2,3] - [2]</code> → <em>[1,3]</em></p></td>
|
|
|
|
|
</tr>
|
|
|
|
|
</tbody>
|
|
|
|
|
</table>
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<p>The items of array can be accessed using the dot <code>.</code> operator.</p>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="listingblock">
|
|
|
|
|
<div class="title">Item access syntax</div>
|
|
|
|
|
<div class="exampleblock">
|
|
|
|
|
<div class="title">Example 6. Item access syntax</div>
|
|
|
|
|
<div class="content">
|
|
|
|
|
<pre class="rouge highlight"><code data-lang="bnf"><item> ::= <list-expr>"."<index-expr></code></pre>
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<p><em>item</em> = <em>list-expr</em> "<strong>.</strong>" <em>list-expr</em></p>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="paragraph">
|
|
|
|
@@ -1099,22 +1257,8 @@ pre.rouge .ss {
|
|
|
|
|
<code class="green">3</code></p>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="sect1">
|
|
|
|
|
<h2 id="_dictionaries"><a class="anchor" href="#_dictionaries"></a><a class="link" href="#_dictionaries">3. Dictionaries</a></h2>
|
|
|
|
|
<div class="sectionbody">
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<p>The <em>dictionary</em> data-type is set of pairs <em>key/value</em>. It is also known as <em>map</em> or <em>associative array</em>. Dictionary literals are sequences of pairs separated by comma <code>,</code>; sequences are enclosed between brace brackets.</p>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="listingblock">
|
|
|
|
|
<div class="title">Dictionary examples</div>
|
|
|
|
|
<div class="content">
|
|
|
|
|
<pre class="rouge highlight"><code data-lang="go"><span class="p">{</span><span class="m">1</span><span class="o">:</span><span class="s">"one"</span><span class="p">,</span> <span class="m">2</span><span class="o">:</span><span class="s">"two"</span><span class="p">}</span>
|
|
|
|
|
<span class="p">{</span><span class="s">"one"</span><span class="o">:</span><span class="m">1</span><span class="p">,</span> <span class="s">"two"</span><span class="o">:</span> <span class="m">2</span><span class="p">}</span>
|
|
|
|
|
<span class="p">{</span><span class="s">"sum"</span><span class="o">:</span><span class="m">1</span><span class="o">+</span><span class="m">2</span><span class="o">+</span><span class="m">3</span><span class="p">,</span> <span class="s">"prod"</span><span class="o">:</span><span class="m">1</span><span class="o">*</span><span class="m">2</span><span class="o">*</span><span class="m">3</span><span class="p">}</span></code></pre>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="sect2">
|
|
|
|
|
<h3 id="_dictionaries"><a class="anchor" href="#_dictionaries"></a><a class="link" href="#_dictionaries">2.5. Dictionaries</a></h3>
|
|
|
|
|
<div class="admonitionblock warning">
|
|
|
|
|
<table>
|
|
|
|
|
<tr>
|
|
|
|
@@ -1127,31 +1271,85 @@ Support for dictionaries is still ongoing.
|
|
|
|
|
</tr>
|
|
|
|
|
</table>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<p>The <em>dictionary</em>, or <em>dict</em>, data-type is set of pairs <em>key/value</em>. It is also known as <em>map</em> or <em>associative array</em>. Dictionary literals are sequences of pairs separated by comma <code>,</code>; sequences are enclosed between brace brackets.</p>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="exampleblock">
|
|
|
|
|
<div class="title">Example 7. Dict literal syntax</div>
|
|
|
|
|
<div class="content">
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<p><strong><em>dict</em></strong> = <em>empty-dict</em> | <em>non-empty-dict</em><br>
|
|
|
|
|
<em>empty-dict</em> = "<strong>{}</strong>"<br>
|
|
|
|
|
<em>non-empty-dict</em> = "<strong>{</strong>" <em>key-scalar</em> "<strong>:</strong>" <em>any-value</em> {"<strong>,</strong>" <em>key-scalar</em> "<strong>:</strong>" _any-value} "<strong>}</strong>"<br></p>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<div class="title">Examples</div>
|
|
|
|
|
<p><code>>>></code> <code class="blue">{1:"one", 2:"two"}</code><br>
|
|
|
|
|
<code>>>></code> <code class="blue">{"one":1, "two": 2}</code><br>
|
|
|
|
|
<code>>>></code> <code class="blue">{"sum":1+2+3, "prod":1*2*3}</code></p>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="sect1">
|
|
|
|
|
<h2 id="_variables"><a class="anchor" href="#_variables"></a><a class="link" href="#_variables">4. Variables</a></h2>
|
|
|
|
|
<h2 id="_variables"><a class="anchor" href="#_variables"></a><a class="link" href="#_variables">3. Variables</a></h2>
|
|
|
|
|
<div class="sectionbody">
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<p>A variable is an identifier with an assigned value. Variables are stored in the object that implements the Go <em>ExprContext</em> interface, e.g. <em>SimpleVarStore</em> or <em>SimpleFuncStore</em>.</p>
|
|
|
|
|
<p><em>Expr</em> supports variables like most programming languages. A variable is an identifier with an assigned value. Variables are stored in <em>contexts</em>.</p>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="listingblock">
|
|
|
|
|
<div class="title">Examples</div>
|
|
|
|
|
<div class="exampleblock">
|
|
|
|
|
<div class="title">Example 8. Variable literal syntax</div>
|
|
|
|
|
<div class="content">
|
|
|
|
|
<pre class="rouge highlight"><code data-lang="go"><span class="n">a</span><span class="o">=</span><span class="m">1</span>
|
|
|
|
|
<span class="n">x</span> <span class="o">=</span> <span class="m">5.2</span> <span class="o">*</span> <span class="p">(</span><span class="m">9</span><span class="o">-</span><span class="m">3</span><span class="p">)</span>
|
|
|
|
|
<span class="n">x</span> <span class="o">=</span> <span class="m">1</span><span class="p">;</span> <span class="n">y</span> <span class="o">=</span> <span class="m">2</span><span class="o">*</span><span class="n">x</span></code></pre>
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<p><strong><em>variable</em></strong> = <em>identifier</em> "<strong>=</strong>" <em>any-value</em><br>
|
|
|
|
|
<em>identifier</em> = <em>alpha</em> {(<em>alpha</em>)|<em>dec-digit</em>|"<strong>_</strong>"}<br>
|
|
|
|
|
<em>alpha</em> = "<strong>a</strong>"|"<strong>b</strong>"|…​"<strong>z</strong>"|"<strong>A</strong>"|"<strong>B</strong>"|…​"<strong>Z</strong>"</p>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="admonitionblock note">
|
|
|
|
|
<table>
|
|
|
|
|
<tr>
|
|
|
|
|
<td class="icon">
|
|
|
|
|
<i class="fa icon-note" title="Note"></i>
|
|
|
|
|
</td>
|
|
|
|
|
<td class="content">
|
|
|
|
|
The assign operator <code class="blue">=</code> returns the value assigned to the variable.
|
|
|
|
|
</td>
|
|
|
|
|
</tr>
|
|
|
|
|
</table>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<div class="title">Examples</div>
|
|
|
|
|
<p><code>>>></code> <code class="blue">a=1</code><br>
|
|
|
|
|
<code class="green">1</code><br>
|
|
|
|
|
<code>>>></code> <code class="blue">a_b=1+2</code><br>
|
|
|
|
|
<code class="green">1+2</code><br>
|
|
|
|
|
<code>>>></code> <code class="blue">a_b</code><br>
|
|
|
|
|
<code class="green">3</code><br>
|
|
|
|
|
<code>>>></code> <code class="blue">x = 5.2 * (9-3)</code> <em class="gray">// The assigned value has the approximation error typical of the float data-type</em><br>
|
|
|
|
|
<code class="green">31.200000000000003</code><br>
|
|
|
|
|
<code>>>></code> <code class="blue">x = 1; y = 2*x</code><br>
|
|
|
|
|
<code class="green">2</code><br>
|
|
|
|
|
<code>>>></code> <code class="blue"><em>a=2</code><br>
|
|
|
|
|
<code class="red">Parse Error: [1:2] unexpected token "</em>"</code><br>
|
|
|
|
|
<code>>>></code> <code class="blue">1=2</code><br>
|
|
|
|
|
<code class="red">Parse Error: assign operator ("=") must be preceded by a variable</code></p>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="sect1">
|
|
|
|
|
<h2 id="_other_operations"><a class="anchor" href="#_other_operations"></a><a class="link" href="#_other_operations">5. Other operations</a></h2>
|
|
|
|
|
<h2 id="_other_operations"><a class="anchor" href="#_other_operations"></a><a class="link" href="#_other_operations">4. Other operations</a></h2>
|
|
|
|
|
<div class="sectionbody">
|
|
|
|
|
<div class="sect2">
|
|
|
|
|
<h3 id="_operator"><a class="anchor" href="#_operator"></a><a class="link" href="#_operator">5.1. <code class="blue">;</code> operator</a></h3>
|
|
|
|
|
<h3 id="_operator"><a class="anchor" href="#_operator"></a><a class="link" href="#_operator">4.1. <code class="blue">;</code> operator</a></h3>
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<p>The semicolon operator <code class="blue">;</code> is an infixed pseudo-operator. It evaluates the left expression first and then the right expression. The latter is the final result.</p>
|
|
|
|
|
<p>The semicolon operator <code class="blue">;</code> is an infixed pseudo-operator. It evaluates the left expression first and then the right expression. The value of the latter is the final result.</p>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<p>An expression that contains <code class="blue">;</code> is called a <em>multi-expression</em> and each component expressione is called a <em>sub-expression</em>.</p>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="admonitionblock important">
|
|
|
|
|
<table>
|
|
|
|
@@ -1177,15 +1375,22 @@ Technically <code class="blue">;</code> is not treated as a real operator. It ac
|
|
|
|
|
</tr>
|
|
|
|
|
</table>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="listingblock">
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<div class="title">Example</div>
|
|
|
|
|
<div class="content">
|
|
|
|
|
<pre class="rouge highlight"><code data-lang="go"><span class="n">a</span><span class="o">=</span><span class="m">1</span><span class="p">;</span> <span class="n">b</span><span class="o">=</span><span class="m">2</span><span class="p">;</span> <span class="n">c</span><span class="o">=</span><span class="m">3</span><span class="p">;</span> <span class="n">a</span><span class="o">+</span><span class="n">b</span><span class="o">+</span><span class="n">c</span> <span class="c">// returns 6</span></code></pre>
|
|
|
|
|
<p><code>>>></code> <code class="blue">a=1; b=2; c=3; a+b+c</code><br>
|
|
|
|
|
<code class="green">6</code></p>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<p>The value of each sub-expression is stored in the automatica variable <em>last</em>.</p>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<div class="title">Example</div>
|
|
|
|
|
<p><code>>>></code> <code class="blue">2+3; b=last+10; last</code><br>
|
|
|
|
|
<code class="green">15</code></p>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="sect2">
|
|
|
|
|
<h3 id="_but_operator"><a class="anchor" href="#_but_operator"></a><a class="link" href="#_but_operator">5.2. <code class="blue">but</code> operator</a></h3>
|
|
|
|
|
<h3 id="_but_operator"><a class="anchor" href="#_but_operator"></a><a class="link" href="#_but_operator">4.2. <code class="blue">but</code> operator</a></h3>
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<p><code class="blue">but</code> is an infixed operator. Its operands can be expressions of any type. It evaluates the left expression first, then the right expression. The value of the right expression is the final result. Examples: <code class="blue">5 but 2</code> returns 2, <code class="blue">x=2*3 but x-1</code> returns 5.</p>
|
|
|
|
|
</div>
|
|
|
|
@@ -1194,7 +1399,7 @@ Technically <code class="blue">;</code> is not treated as a real operator. It ac
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="sect2">
|
|
|
|
|
<h3 id="_assignment_operator"><a class="anchor" href="#_assignment_operator"></a><a class="link" href="#_assignment_operator">5.3. Assignment operator <code class="blue">=</code></a></h3>
|
|
|
|
|
<h3 id="_assignment_operator"><a class="anchor" href="#_assignment_operator"></a><a class="link" href="#_assignment_operator">4.3. Assignment operator <code class="blue">=</code></a></h3>
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<p>The assignment operator <code class="blue">=</code> is used to define variables in the evaluation context or to change their value (see <em>ExprContext</em>).
|
|
|
|
|
The value on the left side of <code class="blue">=</code> must be an identifier. The value on the right side can be any expression and it becomes the result of the assignment operation.</p>
|
|
|
|
@@ -1207,7 +1412,7 @@ The value on the left side of <code class="blue">=</code> must be an identifier.
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="sect2">
|
|
|
|
|
<h3 id="_selector_operator"><a class="anchor" href="#_selector_operator"></a><a class="link" href="#_selector_operator">5.4. Selector operator <code class="blue">? : ::</code></a></h3>
|
|
|
|
|
<h3 id="_selector_operator"><a class="anchor" href="#_selector_operator"></a><a class="link" href="#_selector_operator">4.4. Selector operator <code class="blue">? : ::</code></a></h3>
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<p>The <em>selector operator</em> is very similar to the <em>switch/case/default</em> statement available in many programming languages.</p>
|
|
|
|
|
</div>
|
|
|
|
@@ -1255,13 +1460,13 @@ The value on the left side of <code class="blue">=</code> must be an identifier.
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="sect1">
|
|
|
|
|
<h2 id="_priorities_of_operators"><a class="anchor" href="#_priorities_of_operators"></a><a class="link" href="#_priorities_of_operators">6. Priorities of operators</a></h2>
|
|
|
|
|
<h2 id="_priorities_of_operators"><a class="anchor" href="#_priorities_of_operators"></a><a class="link" href="#_priorities_of_operators">5. Priorities of operators</a></h2>
|
|
|
|
|
<div class="sectionbody">
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<p>The table below shows all supported operators by decreasing priorities.</p>
|
|
|
|
|
</div>
|
|
|
|
|
<table class="tableblock frame-all grid-all stretch">
|
|
|
|
|
<caption class="title">Table 6. Operators priorities</caption>
|
|
|
|
|
<caption class="title">Table 7. Operators priorities</caption>
|
|
|
|
|
<colgroup>
|
|
|
|
|
<col style="width: 12.5%;">
|
|
|
|
|
<col style="width: 12.5%;">
|
|
|
|
@@ -1476,7 +1681,7 @@ The value on the left side of <code class="blue">=</code> must be an identifier.
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="sect1">
|
|
|
|
|
<h2 id="_functions"><a class="anchor" href="#_functions"></a><a class="link" href="#_functions">7. Functions</a></h2>
|
|
|
|
|
<h2 id="_functions"><a class="anchor" href="#_functions"></a><a class="link" href="#_functions">6. Functions</a></h2>
|
|
|
|
|
<div class="sectionbody">
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<p>Functions in <em>Expr</em> are very similar to functions in many programming languages.</p>
|
|
|
|
@@ -1485,13 +1690,13 @@ The value on the left side of <code class="blue">=</code> must be an identifier.
|
|
|
|
|
<p>In <em>Expr</em> functions compute values in a local context (scope) that do not make effects on the calling context. This is the normal behavior. Using the reference operator <code class="blue">@</code> it is possibile to export local definition to the calling context.</p>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="sect2">
|
|
|
|
|
<h3 id="_function_calls"><a class="anchor" href="#_function_calls"></a><a class="link" href="#_function_calls">7.1. Function calls</a></h3>
|
|
|
|
|
<h3 id="_function_calls"><a class="anchor" href="#_function_calls"></a><a class="link" href="#_function_calls">6.1. Function calls</a></h3>
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<p><mark>TODO: function calls operations</mark></p>
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="sect2">
|
|
|
|
|
<h3 id="_function_definitions"><a class="anchor" href="#_function_definitions"></a><a class="link" href="#_function_definitions">7.2. Function definitions</a></h3>
|
|
|
|
|
<h3 id="_function_definitions"><a class="anchor" href="#_function_definitions"></a><a class="link" href="#_function_definitions">6.2. Function definitions</a></h3>
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<p><mark>TODO: function definitions operations</mark></p>
|
|
|
|
|
</div>
|
|
|
|
@@ -1499,17 +1704,17 @@ The value on the left side of <code class="blue">=</code> must be an identifier.
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="sect1">
|
|
|
|
|
<h2 id="_builtins"><a class="anchor" href="#_builtins"></a><a class="link" href="#_builtins">8. Builtins</a></h2>
|
|
|
|
|
<h2 id="_builtins"><a class="anchor" href="#_builtins"></a><a class="link" href="#_builtins">7. Builtins</a></h2>
|
|
|
|
|
<div class="sectionbody">
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<p><mark>TODO: builtins</mark></p>
|
|
|
|
|
</div>
|
|
|
|
|
<div class="sect2">
|
|
|
|
|
<h3 id="_builtin_functions"><a class="anchor" href="#_builtin_functions"></a><a class="link" href="#_builtin_functions">8.1. Builtin functions</a></h3>
|
|
|
|
|
<h3 id="_builtin_functions"><a class="anchor" href="#_builtin_functions"></a><a class="link" href="#_builtin_functions">7.1. Builtin functions</a></h3>
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
<div class="sect2">
|
|
|
|
|
<h3 id="_import"><a class="anchor" href="#_import"></a><a class="link" href="#_import">8.2. <em class="blue">import()</em></a></h3>
|
|
|
|
|
<h3 id="_import"><a class="anchor" href="#_import"></a><a class="link" href="#_import">7.2. <em class="blue">import()</em></a></h3>
|
|
|
|
|
<div class="paragraph">
|
|
|
|
|
<p><em class="blue">import(<span class="grey"><source-file></span>)</em> loads the multi-expression contained in the specified source and returns its value.</p>
|
|
|
|
|
</div>
|
|
|
|
@@ -1519,7 +1724,7 @@ The value on the left side of <code class="blue">=</code> must be an identifier.
|
|
|
|
|
</div>
|
|
|
|
|
<div id="footer">
|
|
|
|
|
<div id="footer-text">
|
|
|
|
|
Last updated 2024-05-11 20:13:17 +0200
|
|
|
|
|
Last updated 2024-05-17 07:30:14 +0200
|
|
|
|
|
</div>
|
|
|
|
|
</div>
|
|
|
|
|
</body>
|
|
|
|
|