aboutsummaryrefslogtreecommitdiff
path: root/docs/spec/grammar.html
diff options
context:
space:
mode:
authorMarshall Lochbaum <mwlochbaum@gmail.com>2021-03-24 22:41:38 -0400
committerMarshall Lochbaum <mwlochbaum@gmail.com>2021-03-24 22:41:38 -0400
commit46e989035fa921a5a32169cc0a9b897ec313cc2e (patch)
treed92737c676f75ef4e752cff095b36fe20a5dfe09 /docs/spec/grammar.html
parent51ddc6a0797452b0f4ae977133038ce2439fbead (diff)
Specify function Undo headers
Diffstat (limited to 'docs/spec/grammar.html')
-rw-r--r--docs/spec/grammar.html8
1 files changed, 7 insertions, 1 deletions
diff --git a/docs/spec/grammar.html b/docs/spec/grammar.html
index dca88643..46509c05 100644
--- a/docs/spec/grammar.html
+++ b/docs/spec/grammar.html
@@ -73,9 +73,15 @@
<span class='Function'>FuncHead</span> <span class='Function'>=</span> <span class='Value'>headW?</span> <span class='Paren'>(</span> <span class='Function'>F</span> <span class='Function'>|</span> <span class='String'>&quot;𝕊&quot;</span> <span class='Paren'>)</span> <span class='Value'>headX</span>
<span class='Function'>|</span> <span class='Value'>sl</span> <span class='Function'>|</span> <span class='String'>&quot;(&quot;</span> <span class='Value'>subExpr</span> <span class='String'>&quot;)&quot;</span> <span class='Function'>|</span> <span class='Value'>brSub</span> <span class='Function'>|</span> <span class='Value'>list</span> <span class='Comment'># subject,
</span> <span class='Function'>|</span> <span class='Function'>ANY</span> <span class='Paren'>(</span> <span class='String'>&quot;‿&quot;</span> <span class='Function'>ANY</span> <span class='Paren'>)</span><span class='Function'>+</span> <span class='Comment'># but not s
-</span><span class='Modifier'>_m1Head</span> <span class='Function'>=</span> <span class='Value'>headW?</span> <span class='Function'>Mod1H1</span> <span class='Value'>headX</span>
+</span> <span class='Function'>|</span> <span class='Function'>UndoHead</span>
+<span class='Modifier'>_m1Head</span> <span class='Function'>=</span> <span class='Value'>headW?</span> <span class='Function'>Mod1H1</span> <span class='Value'>headX</span>
<span class='Modifier2'>_m2Head_</span> <span class='Function'>=</span> <span class='Value'>headW?</span> <span class='Function'>Mod2H1</span> <span class='Value'>headX</span>
</pre>
+<p>Additionally, an inference header doesn't affect evaluation of the function, but describes how an inferred property (<a href="inferred.html#undo">Undo</a>) should be computed. Here <code><span class='String'>&quot;˜&quot;</span></code> and <code><span class='String'>&quot;⁼&quot;</span></code> are both specific instances of the <code><span class='Modifier'>_ml</span></code> token.</p>
+<pre><span class='Function'>UndoHead</span> <span class='Function'>=</span> <span class='Value'>headW?</span> <span class='Paren'>(</span> <span class='Function'>F</span> <span class='Function'>|</span> <span class='String'>&quot;𝕊&quot;</span> <span class='Paren'>)</span> <span class='String'>&quot;⁼&quot;</span> <span class='Value'>headX</span>
+ <span class='Function'>|</span> <span class='Value'>headW</span> <span class='Paren'>(</span> <span class='Function'>F</span> <span class='Function'>|</span> <span class='String'>&quot;𝕊&quot;</span> <span class='Paren'>)</span> <span class='String'>&quot;˜&quot;</span> <span class='String'>&quot;⁼&quot;</span> <span class='Value'>headX</span>
+ <span class='Function'>|</span> <span class='Paren'>(</span> <span class='Function'>F</span> <span class='Function'>|</span> <span class='String'>&quot;𝕊&quot;</span> <span class='Paren'>)</span> <span class='String'>&quot;˜&quot;</span><span class='Value'>?</span> <span class='String'>&quot;⁼&quot;</span>
+</pre>
<p>A braced block contains bodies, which are lists of statements, separated by semicolons and possibly preceded by headers, which are separated from the body with a colon. Multiple bodies allow different handling for various cases, which are pattern-matched by headers. For an immediate block there are no inputs, so there can only be one possible case and one body. Functions and modifiers allow any number of &quot;matched&quot; bodies, with headers that have arguments, followed by at most two &quot;main&quot; bodies with either no headers or headers without arguments. If there is one main body, it is ambivalent, but two main bodies refer to the monadic and dyadic cases.</p>
<pre><span class='Function'>BODY</span> <span class='Function'>=</span> <span class='Function'>PROGRAM</span>
<span class='Function'>FCase</span> <span class='Function'>=</span> <span class='Separator'>⋄</span><span class='Value'>?</span> <span class='Function'>FuncHead</span> <span class='String'>&quot;:&quot;</span> <span class='Function'>BODY</span>