<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.nars2000.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Paul+Robinson</id>
	<title>NARS2000 - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.nars2000.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Paul+Robinson"/>
	<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Special:Contributions/Paul_Robinson"/>
	<updated>2026-05-08T05:32:19Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.38.7</generator>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Symbol_Match&amp;diff=3707</id>
		<title>Symbol Match</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Symbol_Match&amp;diff=3707"/>
		<updated>2019-10-17T12:30:18Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: correct categories&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&amp;lt;h1&amp;gt; {match} &amp;amp;mdash; Depth or Match or Multiset Identical &amp;amp;mdash; Keystroke ALT+SHIFT+1 &amp;amp;mdash; Character 8801&amp;lt;/h1&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:APLKB-Match.png]]&lt;br /&gt;
==Usage==&lt;br /&gt;
==Example==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Stub}}&lt;br /&gt;
{{Article footer|4|M}}&lt;br /&gt;
[[Category:Boolean operators]]&lt;br /&gt;
[[Category:Dyadic operators]]&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Keyboard&amp;diff=3706</id>
		<title>Keyboard</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Keyboard&amp;diff=3706"/>
		<updated>2019-10-17T12:22:47Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These are the keyboard positions used by NARS2000. Hover over a link to see the name of the symbol, click on the link to go to the page defining the symbol. Also see [http://www.sudleyplace.com/APL/Keyboard.ahtml keyboard] and &#039;&#039;&#039;[[APL_Font|APL Font default keyboard]]&#039;&#039;&#039;. &#039;&#039;&#039;Note;;&#039;&#039;&#039; Not al symbols which can be entered from the keybiard are valid operators im APL or in NARS2000.&lt;br /&gt;
&amp;lt;!-- Note to future editors; an APL symbol is called &amp;quot;Symbol Name&amp;quot; when it&#039;s&lt;br /&gt;
 under development on this Wiki; once it becomes a reasonable article, with &lt;br /&gt;
 the keyboard map image, character value and keyboard keys, then the article &lt;br /&gt;
 is upgraded by renaming to the symbol name alone, and its links in &lt;br /&gt;
 [[Keyboard]], [[Character names]] and [[Language Toolbar]] articles as well &lt;br /&gt;
 as Template:Keyboard and  Template:Language_Toolbar are updated as well. --&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size: 200%;&amp;quot; width=&amp;quot;80%&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
||ALT+Shift&lt;br /&gt;
||[[Symbol Comma Bar|⍪]]&lt;br /&gt;
||[[Symbol Match|≡]]&lt;br /&gt;
||[[Symbol Not Match|≢]]&lt;br /&gt;
||[[Symbol Grade Down|⍒]]&lt;br /&gt;
||[[Symbol Grade Up|⍋]]&lt;br /&gt;
||[[Symbol Rotate|⌽]]&lt;br /&gt;
||[[Symbol Circle Slope|⍉]]&lt;br /&gt;
||[[Symbol Circle Bar|⊖]]&lt;br /&gt;
||[[Symbol Log|⍟]]&lt;br /&gt;
||[[Symbol Nor|⍱]]&lt;br /&gt;
||[[Symbol Nand|⍲]]&lt;br /&gt;
||[[Symbol Factorial|!]]&lt;br /&gt;
||[[Symbol Domino|⌹]]&lt;br /&gt;
|-&lt;br /&gt;
||ALT&lt;br /&gt;
||[[Diamond|⋄]]&lt;br /&gt;
||[[Symbol Dieresis|¨]]&lt;br /&gt;
||[[Symbol Overbar|¯]]&lt;br /&gt;
||[[Symbol Less Than|&amp;lt;]]&lt;br /&gt;
||[[Symbol Less Than or Equal|≤]]&lt;br /&gt;
||[[Symbol Equal|=]]&lt;br /&gt;
||[[Symbol Greater Than or Equal|≥]]&lt;br /&gt;
||[[Symbol Greater Than|&amp;gt;]]&lt;br /&gt;
||[[Symbol Not Equal|≠]]&lt;br /&gt;
||[[Symbol Down Caret|∨]]&lt;br /&gt;
||[[Symbol And|∧]]&lt;br /&gt;
||[[Symbol Times|×]]&lt;br /&gt;
||[[Symbol Divide|÷]]&lt;br /&gt;
|-&lt;br /&gt;
||Shift&lt;br /&gt;
||[[Symbol Not|~]]&lt;br /&gt;
||[[Symbol Factorial|!]]&lt;br /&gt;
||@&lt;br /&gt;
||#&lt;br /&gt;
||$&lt;br /&gt;
||%&lt;br /&gt;
||^&lt;br /&gt;
||&amp;amp;&lt;br /&gt;
||*&lt;br /&gt;
||[[Symbol Parenthesis|(]]&lt;br /&gt;
||[[Symbol Parenthesis|)]]&lt;br /&gt;
||[[Symbol Underbar|_]]&lt;br /&gt;
||[[Symbol Plus|+]]&lt;br /&gt;
|-&lt;br /&gt;
||Key&lt;br /&gt;
||`&lt;br /&gt;
||1&lt;br /&gt;
||2&lt;br /&gt;
||3&lt;br /&gt;
||4&lt;br /&gt;
||5&lt;br /&gt;
||6&lt;br /&gt;
||7&lt;br /&gt;
||8&lt;br /&gt;
||9&lt;br /&gt;
||0&lt;br /&gt;
||[[Symbol Minus|-]]&lt;br /&gt;
||[[Symbol Equal|=]]&lt;br /&gt;
|| (backspace)&lt;br /&gt;
|-&lt;br /&gt;
|colspan=15|&lt;br /&gt;
|-&lt;br /&gt;
||ALT+Shift&lt;br /&gt;
|colspan=3|&lt;br /&gt;
||[[Symbol Find|⍷]]&lt;br /&gt;
||[[Symbol Root|√]]&lt;br /&gt;
||[[Symbol Commute|⍨]]&lt;br /&gt;
|colspan=2|&lt;br /&gt;
||[[Symbol Iota Underbar|⍸]]&lt;br /&gt;
||[[⍥]]&lt;br /&gt;
||[[⍣]]&lt;br /&gt;
||[[Symbol Quote Quad|⍞]]&lt;br /&gt;
||[[Symbol Zilde|⍬]]&lt;br /&gt;
||[[Symbol Lev|⊣]]&lt;br /&gt;
|-&lt;br /&gt;
||ALT&lt;br /&gt;
||&lt;br /&gt;
||[[Symbol Query|?]]&lt;br /&gt;
||[[Special Symbols|⍵]]&lt;br /&gt;
||[[Symbol Epsilon|∊]]&lt;br /&gt;
||[[Symbol Rho|⍴]]&lt;br /&gt;
||[[Symbol Not|∼]]&lt;br /&gt;
||[[Symbol Take|↑]]&lt;br /&gt;
||[[Symbol Drop|↓]]&lt;br /&gt;
||[[Symbol Iota|⍳]]&lt;br /&gt;
||[[Symbol Jot|○]]&lt;br /&gt;
||[[Symbol Pi|π]]&lt;br /&gt;
||[[Symbol Assign|←]]&lt;br /&gt;
||[[Symbol Goto|→]]&lt;br /&gt;
||[[Symbol Dex|⊢]]&lt;br /&gt;
|-&lt;br /&gt;
||SHIFT&lt;br /&gt;
||&lt;br /&gt;
||Q&lt;br /&gt;
||W&lt;br /&gt;
||E&lt;br /&gt;
||R&lt;br /&gt;
||T&lt;br /&gt;
||Y&lt;br /&gt;
||U&lt;br /&gt;
||I&lt;br /&gt;
||O&lt;br /&gt;
||P&lt;br /&gt;
||{&lt;br /&gt;
||}&lt;br /&gt;
||[[Symbol Mod|&amp;amp;#124;]]&lt;br /&gt;
|-&lt;br /&gt;
||Key&lt;br /&gt;
||(Tab)&lt;br /&gt;
||q&lt;br /&gt;
||w&lt;br /&gt;
||e&lt;br /&gt;
||r&lt;br /&gt;
||t&lt;br /&gt;
||y&lt;br /&gt;
||u&lt;br /&gt;
||i&lt;br /&gt;
||o&lt;br /&gt;
||p&lt;br /&gt;
||[[Symbol Brace|&amp;amp;#91;]]&lt;br /&gt;
||[[Symbol Brace|&amp;amp;#93;]]&lt;br /&gt;
||[[Symbol Slope|\]]&lt;br /&gt;
|-&lt;br /&gt;
|colspan=15|&lt;br /&gt;
|-&lt;br /&gt;
||ALT+Shift&lt;br /&gt;
|Colspan=2|&lt;br /&gt;
||[[Symbol Section|§]]&lt;br /&gt;
|colspan=2|&lt;br /&gt;
||[[Symbol Dieresis Del|⍢]]&lt;br /&gt;
||[[Special Symbols|⍙]]&lt;br /&gt;
||[[Symbol Dieresis Jot|⍤]]&lt;br /&gt;
||&lt;br /&gt;
||[[Symbol Squad|⌷]]&lt;br /&gt;
|-&lt;br /&gt;
||ALT&lt;br /&gt;
||&lt;br /&gt;
||[[Special Symbols|⍺]]&lt;br /&gt;
||[[Symbol Ceiling|⌈]]&lt;br /&gt;
||[[Symbol Floor|⌊]]&lt;br /&gt;
||[[Symbol Infinity|∞]]&lt;br /&gt;
||[[Del|∇]]&lt;br /&gt;
||[[Special Symbols|∆]]&lt;br /&gt;
||[[Symbol Jot|∘]]&lt;br /&gt;
||[[Symbol Quote|&#039;]]&lt;br /&gt;
||[[Symbol Quad|⎕]]&lt;br /&gt;
||[[Symbol Execute|⍎]]&lt;br /&gt;
||[[Symbol Format|⍕]]&lt;br /&gt;
|-&lt;br /&gt;
||Shift&lt;br /&gt;
||&lt;br /&gt;
||A&lt;br /&gt;
||S&lt;br /&gt;
||D&lt;br /&gt;
||F&lt;br /&gt;
||G&lt;br /&gt;
||H&lt;br /&gt;
||J&lt;br /&gt;
||K&lt;br /&gt;
||L&lt;br /&gt;
||[[Symbol Colon|:]]&lt;br /&gt;
||&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
||Key&lt;br /&gt;
||(Caps&amp;lt;br/&amp;gt;Lock)&lt;br /&gt;
||a&lt;br /&gt;
||s&lt;br /&gt;
||d&lt;br /&gt;
||f&lt;br /&gt;
||g&lt;br /&gt;
||h&lt;br /&gt;
||j&lt;br /&gt;
||k&lt;br /&gt;
||l&lt;br /&gt;
||[[Symbol Semicolon|;]]&lt;br /&gt;
||[[Symbol Quote|&#039;]]&lt;br /&gt;
|colspan=2|(enter)&lt;br /&gt;
|-&lt;br /&gt;
|colspan=15|&lt;br /&gt;
|-&lt;br /&gt;
||ALT+Shift&lt;br /&gt;
||&lt;br /&gt;
||[[Symbol Left Shoe Underbar|⊆]]&lt;br /&gt;
||[[Symbol Right Shoe Underbar|⊇]]&lt;br /&gt;
|colspan=3|&lt;br /&gt;
||[[Symbol Dieresis Down Tack|⍡]]&lt;br /&gt;
||[[Symbol Stile Tilde|⍭]]&lt;br /&gt;
|colspan=2|&lt;br /&gt;
||[[Symbol Circle Middle Dot|⊙]]&lt;br /&gt;
|-&lt;br /&gt;
||ALT&lt;br /&gt;
||&lt;br /&gt;
||[[Symbol Left Shoe|⊂]]&lt;br /&gt;
||[[Symbol Right Shoe|⊃]]&lt;br /&gt;
||[[Symbol Up Shoe|∩]]&lt;br /&gt;
||[[Symbol Down Shoe|∪]]&lt;br /&gt;
||[[Symbol Base Value|⊥]]&lt;br /&gt;
||[[Symbol Represent|⊤]]&lt;br /&gt;
||[[Symbol Multiset|⍦]]&lt;br /&gt;
||[[Lamp|⍝]]&lt;br /&gt;
||[[Symbol Slope Bar|⍀]]&lt;br /&gt;
||[[Symbol Slash Bar|⌿]]&lt;br /&gt;
|-&lt;br /&gt;
||Shift&lt;br /&gt;
||&lt;br /&gt;
||Z&lt;br /&gt;
||X&lt;br /&gt;
||C&lt;br /&gt;
||V&lt;br /&gt;
||B&lt;br /&gt;
||N&lt;br /&gt;
||M&lt;br /&gt;
||[[Symbol Less Than|&amp;lt;]]&lt;br /&gt;
||[[Symbol Greater Than|&amp;gt;]]&lt;br /&gt;
||[[Symbol Query|?]]&lt;br /&gt;
|-&lt;br /&gt;
||Key&lt;br /&gt;
|(Shift)&lt;br /&gt;
||z&lt;br /&gt;
||x&lt;br /&gt;
||c&lt;br /&gt;
||v&lt;br /&gt;
||b&lt;br /&gt;
||n&lt;br /&gt;
||m&lt;br /&gt;
||[[Symbol Comma|,]]&lt;br /&gt;
||[[Symbol Dot|.]]&lt;br /&gt;
||[[Symbol Slash|/]]&lt;br /&gt;
||(Shift)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
{{Article footer}}&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Symbol_Domino&amp;diff=3688</id>
		<title>Symbol Domino</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Symbol_Domino&amp;diff=3688"/>
		<updated>2019-10-16T16:50:06Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: Paul Robinson moved page Symbol Domino to Domino: Page is of sufficient quality to be upgradwd to standalone sympbol name alone&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Domino]]&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Domino&amp;diff=3687</id>
		<title>Domino</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Domino&amp;diff=3687"/>
		<updated>2019-10-16T16:50:06Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: Paul Robinson moved page Symbol Domino to Domino: Page is of sufficient quality to be upgradwd to standalone sympbol name alone&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&amp;lt;h1&amp;gt; {domino} &amp;amp;mdash; Matrix Inverse or Division &amp;amp;mdash; Keystroke ALT+SHIFT+=  &amp;amp;mdash; Character 9017 or 0x2339&amp;lt;/h1&amp;gt;&lt;br /&gt;
Note: The symbol is created by ALT+SHIFT+=; ALT+= will produce [[Symbol Divide|Divide]] &amp;lt;big&amp;gt;(&amp;lt;big&amp;gt;&#039;&#039;&#039;{divide}&#039;&#039;&#039;&amp;lt;/big&amp;gt;)&amp;lt;/big&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Caution:&#039;&#039;&#039; Be careful not to confuse this symbol, which is &amp;lt;apll&amp;gt;⌹&amp;lt;/apll&amp;gt;, with &amp;lt;apll&amp;gt;⍠&amp;lt;/apll&amp;gt; which is [[Variant]].&lt;br /&gt;
&lt;br /&gt;
[[File:APLKB-Domino.png]]&lt;br /&gt;
==Usage==&lt;br /&gt;
&lt;br /&gt;
See also &#039;&#039;&#039;[[Matrix_Inverse/Divide]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&amp;lt;big&amp;gt; {domino} Monadic Example - Matrix Inverse for a square matrix:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      Z     ⍝Variable and matrix Z has 3 rows and 3 columns of numbers, as follows:&lt;br /&gt;
1 2 3&lt;br /&gt;
0 1 4&lt;br /&gt;
5 6 0&lt;br /&gt;
      ⌹Z   ⍝The mathmatical inverse of matrix Z (domino Z) is also a 3-row by 3-col numeric matrix, as follows:&lt;br /&gt;
¯24  18  5&lt;br /&gt;
 20 ¯15 ¯4&lt;br /&gt;
 ¯5   4  1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{domino} Dyadic Example - Matrix Division - Least Squares Curve Fitting - Multiple Regression using Non-Square Data Matrix:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      ⍴Homes   ⍝Global variable Homes is a 23 row by 8 column matrix:&lt;br /&gt;
23 8&lt;br /&gt;
      Homes    ⍝The first row of variable/matrix Homes has nested column headers, with 22 data rows:&lt;br /&gt;
⍝Col#&#039;s 1    2         3          4          5           6       7               8&lt;br /&gt;
 Property SqFt #Bedrooms #FullBaths #HalfBaths YrsAgoBuilt   Price Predicted Price    ⍝Note: Predicted Price col(8) is not yet calculated!&lt;br /&gt;
 A        2149         3          2          1          15 469.9                 0 &lt;br /&gt;
 B        2410         4          3          1          13 523.5                 0 &lt;br /&gt;
 C        2530         4          3          0          12 535                   0 &lt;br /&gt;
 D        2502         3          2          0          12 569.999               0 &lt;br /&gt;
 E        2600         5          2          1          17 588                   0 &lt;br /&gt;
 F        2586         4          3          1           6 589                   0 &lt;br /&gt;
 G        2836         3          2          1          12 599.9                 0 &lt;br /&gt;
 H        3300         4          2          1          10 615                   0 &lt;br /&gt;
 I        3000         4          3          0          11 659                   0 &lt;br /&gt;
 J        2723         3          2          1          12 665                   0 &lt;br /&gt;
 K        2800         4          3          1          18 729                   0 &lt;br /&gt;
 L        3700         5          3          1           4 767                   0 &lt;br /&gt;
 M        3900         4          3          1          19 799.9                 0 &lt;br /&gt;
 N        3840         6          4          1           6 945                   0 &lt;br /&gt;
 O        2185         3          2          0          12 515                   0 &lt;br /&gt;
 P        2600         4          3          0          12 579.5                 0 &lt;br /&gt;
 Q        4220         5          3          1          18 645.9                 0 &lt;br /&gt;
 R        2136         3          2          0          14 505                   0 &lt;br /&gt;
 S        2530         3          2          1          13 539.9                 0 &lt;br /&gt;
 T        2724         3          2          0          12 634.9                 0 &lt;br /&gt;
 U        2896         4          3          0           7 750                   0 &lt;br /&gt;
 V        3835         3          3          1           6 982.5                 0&lt;br /&gt;
&lt;br /&gt;
      ⍝Note just below that because the first row of Homes has column headers(text) - they must be dropped from ⌹&#039;s least-squares data fit.&lt;br /&gt;
      RegrCoeffs←(1↓Homes[;7])⌹1,(1 0↓Homes[;2 3 4 5 6])  ⍝Calc regr. coeff&#039;s using Home Prices(col 7, dep var Y) vs. all indep vars(X&#039;s, cols 2-6)&lt;br /&gt;
      ⍴RegrCoeffs     ⍝Note &#039;⌹1,&#039; just above means add extra coeff. for Y-intercept; plus cols(2-6)=5 indep X-type vars; RegrCoeffs has 6 elements.&lt;br /&gt;
6&lt;br /&gt;
      RegrCoeffs&lt;br /&gt;
234.9773005 0.1495539775 ¯41.70990009 80.27420326 16.19671155 ¯7.019567895&lt;br /&gt;
&lt;br /&gt;
      Homes[1+⍳22;8]←(1,Homes[1+⍳22;2 3 4 5 6])+.×RegrCoeffs   ⍝Use inner product +.× to calc predicted prices for 22 data rows, place in col 8.&lt;br /&gt;
&lt;br /&gt;
      Homes          ⍝The following is what variable Homes looks like; with Predicted Prices calculated and inserted back into matrix Homes:&lt;br /&gt;
 Property SqFt #Bedrooms #FullBaths #HalfBaths YrsAgoBuilt   Price Predicted Price &lt;br /&gt;
 A        2149         3          2          1          15 469.9       502.6906976 &lt;br /&gt;
 B        2410         4          3          1          13 523.5       594.3277247 &lt;br /&gt;
 C        2530         4          3          0          12 535         603.0970583 &lt;br /&gt;
 D        2502         3          2          0          12 569.999     560.3452438 &lt;br /&gt;
 E        2600         5          2          1          17 588         472.6806055 &lt;br /&gt;
 F        2586         4          3          1           6 589         669.7862    &lt;br /&gt;
 G        2836         3          2          1          12 599.9       626.4929838 &lt;br /&gt;
 H        3300         4          2          1          10 615         668.2152651 &lt;br /&gt;
 I        3000         4          3          0          11 659         680.4069957 &lt;br /&gt;
 J        2723         3          2          1          12 665         609.5933844 &lt;br /&gt;
 K        2800         4          3          1          18 729         617.5559364 &lt;br /&gt;
 L        3700         5          3          1           4 767         808.7185666 &lt;br /&gt;
 M        3900         4          3          1          19 799.9       775.0457438 &lt;br /&gt;
 N        3840         6          4          1           6 945         854.1812909 &lt;br /&gt;
 O        2185         3          2          0          12 515         512.9366329 &lt;br /&gt;
 P        2600         4          3          0          12 579.5       613.5658367 &lt;br /&gt;
 Q        4220         5          3          1          18 645.9       788.2126844 &lt;br /&gt;
 R        2136         3          2          0          14 505         491.5693522 &lt;br /&gt;
 S        2530         3          2          1          13 539.9       573.7098988 &lt;br /&gt;
 T        2724         3          2          0          12 634.9       593.5462268 &lt;br /&gt;
 U        2896         4          3          0           7 750         692.9316536 &lt;br /&gt;
 V        3835         3          3          1           6 982.5       898.289018 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Article footer|2|Domino}}&lt;br /&gt;
[[Category:Monadic operators]][[Category:Dyadic operators]]&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Domino&amp;diff=3686</id>
		<title>Domino</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Domino&amp;diff=3686"/>
		<updated>2019-10-16T16:42:02Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: explain &amp;amp; add cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&amp;lt;h1&amp;gt; {domino} &amp;amp;mdash; Matrix Inverse or Division &amp;amp;mdash; Keystroke ALT+SHIFT+=  &amp;amp;mdash; Character 9017 or 0x2339&amp;lt;/h1&amp;gt;&lt;br /&gt;
Note: The symbol is created by ALT+SHIFT+=; ALT+= will produce [[Symbol Divide|Divide]] &amp;lt;big&amp;gt;(&amp;lt;big&amp;gt;&#039;&#039;&#039;{divide}&#039;&#039;&#039;&amp;lt;/big&amp;gt;)&amp;lt;/big&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Caution:&#039;&#039;&#039; Be careful not to confuse this symbol, which is &amp;lt;apll&amp;gt;⌹&amp;lt;/apll&amp;gt;, with &amp;lt;apll&amp;gt;⍠&amp;lt;/apll&amp;gt; which is [[Variant]].&lt;br /&gt;
&lt;br /&gt;
[[File:APLKB-Domino.png]]&lt;br /&gt;
==Usage==&lt;br /&gt;
&lt;br /&gt;
See also &#039;&#039;&#039;[[Matrix_Inverse/Divide]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Examples==&lt;br /&gt;
&amp;lt;big&amp;gt; {domino} Monadic Example - Matrix Inverse for a square matrix:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      Z     ⍝Variable and matrix Z has 3 rows and 3 columns of numbers, as follows:&lt;br /&gt;
1 2 3&lt;br /&gt;
0 1 4&lt;br /&gt;
5 6 0&lt;br /&gt;
      ⌹Z   ⍝The mathmatical inverse of matrix Z (domino Z) is also a 3-row by 3-col numeric matrix, as follows:&lt;br /&gt;
¯24  18  5&lt;br /&gt;
 20 ¯15 ¯4&lt;br /&gt;
 ¯5   4  1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
{domino} Dyadic Example - Matrix Division - Least Squares Curve Fitting - Multiple Regression using Non-Square Data Matrix:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      ⍴Homes   ⍝Global variable Homes is a 23 row by 8 column matrix:&lt;br /&gt;
23 8&lt;br /&gt;
      Homes    ⍝The first row of variable/matrix Homes has nested column headers, with 22 data rows:&lt;br /&gt;
⍝Col#&#039;s 1    2         3          4          5           6       7               8&lt;br /&gt;
 Property SqFt #Bedrooms #FullBaths #HalfBaths YrsAgoBuilt   Price Predicted Price    ⍝Note: Predicted Price col(8) is not yet calculated!&lt;br /&gt;
 A        2149         3          2          1          15 469.9                 0 &lt;br /&gt;
 B        2410         4          3          1          13 523.5                 0 &lt;br /&gt;
 C        2530         4          3          0          12 535                   0 &lt;br /&gt;
 D        2502         3          2          0          12 569.999               0 &lt;br /&gt;
 E        2600         5          2          1          17 588                   0 &lt;br /&gt;
 F        2586         4          3          1           6 589                   0 &lt;br /&gt;
 G        2836         3          2          1          12 599.9                 0 &lt;br /&gt;
 H        3300         4          2          1          10 615                   0 &lt;br /&gt;
 I        3000         4          3          0          11 659                   0 &lt;br /&gt;
 J        2723         3          2          1          12 665                   0 &lt;br /&gt;
 K        2800         4          3          1          18 729                   0 &lt;br /&gt;
 L        3700         5          3          1           4 767                   0 &lt;br /&gt;
 M        3900         4          3          1          19 799.9                 0 &lt;br /&gt;
 N        3840         6          4          1           6 945                   0 &lt;br /&gt;
 O        2185         3          2          0          12 515                   0 &lt;br /&gt;
 P        2600         4          3          0          12 579.5                 0 &lt;br /&gt;
 Q        4220         5          3          1          18 645.9                 0 &lt;br /&gt;
 R        2136         3          2          0          14 505                   0 &lt;br /&gt;
 S        2530         3          2          1          13 539.9                 0 &lt;br /&gt;
 T        2724         3          2          0          12 634.9                 0 &lt;br /&gt;
 U        2896         4          3          0           7 750                   0 &lt;br /&gt;
 V        3835         3          3          1           6 982.5                 0&lt;br /&gt;
&lt;br /&gt;
      ⍝Note just below that because the first row of Homes has column headers(text) - they must be dropped from ⌹&#039;s least-squares data fit.&lt;br /&gt;
      RegrCoeffs←(1↓Homes[;7])⌹1,(1 0↓Homes[;2 3 4 5 6])  ⍝Calc regr. coeff&#039;s using Home Prices(col 7, dep var Y) vs. all indep vars(X&#039;s, cols 2-6)&lt;br /&gt;
      ⍴RegrCoeffs     ⍝Note &#039;⌹1,&#039; just above means add extra coeff. for Y-intercept; plus cols(2-6)=5 indep X-type vars; RegrCoeffs has 6 elements.&lt;br /&gt;
6&lt;br /&gt;
      RegrCoeffs&lt;br /&gt;
234.9773005 0.1495539775 ¯41.70990009 80.27420326 16.19671155 ¯7.019567895&lt;br /&gt;
&lt;br /&gt;
      Homes[1+⍳22;8]←(1,Homes[1+⍳22;2 3 4 5 6])+.×RegrCoeffs   ⍝Use inner product +.× to calc predicted prices for 22 data rows, place in col 8.&lt;br /&gt;
&lt;br /&gt;
      Homes          ⍝The following is what variable Homes looks like; with Predicted Prices calculated and inserted back into matrix Homes:&lt;br /&gt;
 Property SqFt #Bedrooms #FullBaths #HalfBaths YrsAgoBuilt   Price Predicted Price &lt;br /&gt;
 A        2149         3          2          1          15 469.9       502.6906976 &lt;br /&gt;
 B        2410         4          3          1          13 523.5       594.3277247 &lt;br /&gt;
 C        2530         4          3          0          12 535         603.0970583 &lt;br /&gt;
 D        2502         3          2          0          12 569.999     560.3452438 &lt;br /&gt;
 E        2600         5          2          1          17 588         472.6806055 &lt;br /&gt;
 F        2586         4          3          1           6 589         669.7862    &lt;br /&gt;
 G        2836         3          2          1          12 599.9       626.4929838 &lt;br /&gt;
 H        3300         4          2          1          10 615         668.2152651 &lt;br /&gt;
 I        3000         4          3          0          11 659         680.4069957 &lt;br /&gt;
 J        2723         3          2          1          12 665         609.5933844 &lt;br /&gt;
 K        2800         4          3          1          18 729         617.5559364 &lt;br /&gt;
 L        3700         5          3          1           4 767         808.7185666 &lt;br /&gt;
 M        3900         4          3          1          19 799.9       775.0457438 &lt;br /&gt;
 N        3840         6          4          1           6 945         854.1812909 &lt;br /&gt;
 O        2185         3          2          0          12 515         512.9366329 &lt;br /&gt;
 P        2600         4          3          0          12 579.5       613.5658367 &lt;br /&gt;
 Q        4220         5          3          1          18 645.9       788.2126844 &lt;br /&gt;
 R        2136         3          2          0          14 505         491.5693522 &lt;br /&gt;
 S        2530         3          2          1          13 539.9       573.7098988 &lt;br /&gt;
 T        2724         3          2          0          12 634.9       593.5462268 &lt;br /&gt;
 U        2896         4          3          0           7 750         692.9316536 &lt;br /&gt;
 V        3835         3          3          1           6 982.5       898.289018 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Article footer|2|Domino}}&lt;br /&gt;
[[Category:Monadic operators]][[Category:Dyadic operators]]&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Matrix_Inverse/Divide&amp;diff=3685</id>
		<title>Matrix Inverse/Divide</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Matrix_Inverse/Divide&amp;diff=3685"/>
		<updated>2019-10-16T16:28:54Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: t/c&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Caution:&#039;&#039;&#039; Be careful not to confuse this symbol, which is &amp;lt;apll&amp;gt;⌹&amp;lt;/apll&amp;gt;, with &amp;lt;apll&amp;gt;⍠&amp;lt;/apll&amp;gt; which is [[Variant]].&lt;br /&gt;
&amp;lt;hr /&amp;gt;&amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; rules=&amp;quot;none&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
    &amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;apll&amp;gt;Z←⌹R&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;returns the inverse of the right argument.&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; is a numeric scalar, vector or matrix; otherwise signal a &amp;lt;apll&amp;gt;RANK ERROR&amp;lt;/apll&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;Z&amp;lt;/apll&amp;gt; is a numeric array of rank &amp;lt;apll&amp;gt;⍴⍴R&amp;lt;/apll&amp;gt;, and shape &amp;lt;apll&amp;gt;⌽⍴R&amp;lt;/apll&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This feature implements matrix inversion on &#039;&#039;&#039;Boolean&#039;&#039;&#039;, &#039;&#039;&#039;integer&#039;&#039;&#039;, or &#039;&#039;&#039;floating point&#039;&#039;&#039; arguments using [http://www.gnu.org/software/gsl/manual/html_node/Singular-Value-Decomposition.html Singular Value Decomposition].  In particular, this means that any numeric array meeting the rank and shape requirements above is invertible.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Matrix inverse (&amp;lt;apll&amp;gt;⌹R&amp;lt;/apll&amp;gt;) and matrix division (&amp;lt;apll&amp;gt;L⌹R&amp;lt;/apll&amp;gt;) on &#039;&#039;&#039;Rational&#039;&#039;&#039;, &#039;&#039;&#039;VFP&#039;&#039;&#039;, or &#039;&#039;&#039;Ball&#039;&#039;&#039; arguments each have two limitations above and beyond that of normal conformability:&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;&amp;lt;p&amp;gt;for a &#039;&#039;&#039;square&#039;&#039;&#039; (&amp;lt;apll&amp;gt;=/⍴R&amp;lt;/apll&amp;gt;) right argument that it be non-singular, and&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;&amp;lt;p&amp;gt;for an &#039;&#039;&#039;overdetermined&#039;&#039;&#039; (&amp;lt;apll&amp;gt;&amp;amp;gt;/⍴R&amp;lt;/apll&amp;gt;) or &#039;&#039;&#039;underdetermined&#039;&#039;&#039; (&amp;lt;apll&amp;gt;&amp;amp;lt;/⍴R&amp;lt;/apll&amp;gt;) right argument that the symmetric matrix &amp;lt;apll&amp;gt;(⍉R)+.×R&amp;lt;/apll&amp;gt; be non-singular.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;These limitations are due to the algorithm ([http://en.wikipedia.org/wiki/Gauss%E2%80%93Jordan_elimination Gauss-Jordan Elimination]) used to implement Matrix Inverse/Divide on Rational and VFP numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Overdetermined matrices are evaluated equivalently to the expression &amp;lt;apll&amp;gt;(⌹(⍉R)+.×R)+.×⍉R&amp;lt;/apll&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Underdetermined matrices are evaluated equivalently to the expression &amp;lt;apll&amp;gt;(⍉R)+.×⌹R+.×⍉R&amp;lt;/apll&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For example,&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      ⌹3 3{rho}0&lt;br /&gt;
 0 0 0&lt;br /&gt;
 0 0 0&lt;br /&gt;
 0 0 0&lt;br /&gt;
      ⌹3 3⍴1 2 3 4&lt;br /&gt;
¯0.1944444444   0.2777777778   0.02777777778&lt;br /&gt;
 0.05555555556 ¯0.2222222222   0.2777777778&lt;br /&gt;
 0.3611111111   0.05555555556 ¯0.1944444444&lt;br /&gt;
      ⌹3 3⍴1 2 3 4&amp;lt;pn&amp;gt;x&amp;lt;/pn&amp;gt;&lt;br /&gt;
¯7&amp;lt;pn&amp;gt;r&amp;lt;/pn&amp;gt;36  5&amp;lt;pn&amp;gt;r&amp;lt;/pn&amp;gt;18  1&amp;lt;pn&amp;gt;r&amp;lt;/pn&amp;gt;36&lt;br /&gt;
 1&amp;lt;pn&amp;gt;r&amp;lt;/pn&amp;gt;18 ¯2&amp;lt;pn&amp;gt;r&amp;lt;/pn&amp;gt;9   5&amp;lt;pn&amp;gt;r&amp;lt;/pn&amp;gt;18&lt;br /&gt;
13&amp;lt;pn&amp;gt;r&amp;lt;/pn&amp;gt;36  1&amp;lt;pn&amp;gt;r&amp;lt;/pn&amp;gt;18 ¯7&amp;lt;pn&amp;gt;r&amp;lt;/pn&amp;gt;36&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; rules=&amp;quot;none&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
    &amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;apll&amp;gt;Z←L⌹R&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;returns the quotient of the left and right arguments.  This quotient can be interpreted in various ways, such as the least squares solution of the system of linear equations determined by arguments.&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; is a numeric scalar, vector or matrix; otherwise signal a &amp;lt;apll&amp;gt;RANK ERROR&amp;lt;/apll&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; is a numeric scalar, vector or matrix; otherwise signal a &amp;lt;apll&amp;gt;RANK ERROR&amp;lt;/apll&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;If either &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; is a scalar or vector, it is coerced to a matrix by &amp;lt;apll&amp;gt;(L R)←⍪{each}L R&amp;lt;/apll&amp;gt;.  After this coercion, if the two matrices have a different number of rows, signal a &amp;lt;apll&amp;gt;LENGTH ERROR&amp;lt;/apll&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;Z&amp;lt;/apll&amp;gt; is a numeric array.  Before the above coercion of &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;, the rank of &amp;lt;apll&amp;gt;Z&amp;lt;/apll&amp;gt; is &amp;lt;apll&amp;gt;¯2+2⌈(⍴⍴L)+⍴⍴R&amp;lt;/apll&amp;gt;, and the shape is &amp;lt;apll&amp;gt;(1↓⍴R),1↓⍴L&amp;lt;/apll&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This feature implements matrix division on &#039;&#039;&#039;Boolean&#039;&#039;&#039;, &#039;&#039;&#039;integer&#039;&#039;&#039; and &#039;&#039;&#039;floating point&#039;&#039;&#039; arguments using [http://www.gnu.org/software/gsl/manual/html_node/Singular-Value-Decomposition.html Singular Value Decomposition].  In particular, this means that any two numeric arrays meeting the rank and shape requirements above are divisible.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;As noted above, Matrix Division on &#039;&#039;&#039;Rational&#039;&#039;&#039;, &#039;&#039;&#039;VFP&#039;&#039;&#039;, or &#039;&#039;&#039;Ball&#039;&#039;&#039; arguments uses a different algorithm and has slightly more restrictive conformability requirements.&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;&amp;lt;p&amp;gt;for a &#039;&#039;&#039;square&#039;&#039;&#039; (&amp;lt;apll&amp;gt;=/⍴R&amp;lt;/apll&amp;gt;) right argument that it be non-singular, and&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;&amp;lt;p&amp;gt;for an &#039;&#039;&#039;overdetermined&#039;&#039;&#039; (&amp;lt;apll&amp;gt;&amp;amp;gt;/⍴R&amp;lt;/apll&amp;gt;) or &#039;&#039;&#039;underdetermined&#039;&#039;&#039; (&amp;lt;apll&amp;gt;&amp;amp;lt;/⍴R&amp;lt;/apll&amp;gt;) right argument that the symmetric matrix &amp;lt;apll&amp;gt;(⍉R)+.×R&amp;lt;/apll&amp;gt; be non-singular.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Overdetermined matrices are evaluated equivalently to the expression &amp;lt;apll&amp;gt;(⌹(⍉R)+.×R)+.×(⍉R)+.×L&amp;lt;/apll&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Underdetermined matrices are evaluated equivalently to the expression &amp;lt;apll&amp;gt;(⍉R)+.×⌹R+.×(⍉R)+.×L&amp;lt;/apll&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For example,&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      a←3 3⍴0&lt;br /&gt;
      a⌹a&lt;br /&gt;
 0 0 0&lt;br /&gt;
 0 0 0&lt;br /&gt;
 0 0 0&lt;br /&gt;
      1 2 3⌹3 3⍴1 2 3 4&lt;br /&gt;
0.4444444444 0.4444444444 ¯0.1111111111&lt;br /&gt;
      1 2 3⌹3 3⍴1 2 3 4&amp;lt;pn&amp;gt;x&amp;lt;/pn&amp;gt;&lt;br /&gt;
4&amp;lt;pn&amp;gt;r&amp;lt;/pn&amp;gt;9 4&amp;lt;pn&amp;gt;r&amp;lt;/pn&amp;gt;9 ¯1&amp;lt;pn&amp;gt;r&amp;lt;/pn&amp;gt;9&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr width=35%&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;For several more everyday problem-solving examples using Matrix Inverse see also &#039;&#039;&#039;[[Symbol_Domino|Domino Symbol ⌹]]&#039;&#039;&#039;.&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;hr width=35%&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Article footer|2|Matrix}}&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Matrix_Inverse/Divide&amp;diff=3684</id>
		<title>Matrix Inverse/Divide</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Matrix_Inverse/Divide&amp;diff=3684"/>
		<updated>2019-10-16T16:25:25Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: add explanation&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Caution:&#039;&#039;&#039; Be careful not to confuse this symbol, which is &amp;lt;apll&amp;gt;⌹&amp;lt;/apll&amp;gt;, with &amp;lt;apll&amp;gt;⍠&amp;lt;/apll&amp;gt; which is [[Variant]].&lt;br /&gt;
&amp;lt;hr /&amp;gt;&amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; rules=&amp;quot;none&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
    &amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;apll&amp;gt;Z←⌹R&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;returns the inverse of the right argument.&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; is a numeric scalar, vector or matrix; otherwise signal a &amp;lt;apll&amp;gt;RANK ERROR&amp;lt;/apll&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;Z&amp;lt;/apll&amp;gt; is a numeric array of rank &amp;lt;apll&amp;gt;⍴⍴R&amp;lt;/apll&amp;gt;, and shape &amp;lt;apll&amp;gt;⌽⍴R&amp;lt;/apll&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This feature implements matrix inversion on &#039;&#039;&#039;Boolean&#039;&#039;&#039;, &#039;&#039;&#039;integer&#039;&#039;&#039;, or &#039;&#039;&#039;floating point&#039;&#039;&#039; arguments using [http://www.gnu.org/software/gsl/manual/html_node/Singular-Value-Decomposition.html Singular Value Decomposition].  In particular, this means that any numeric array meeting the rank and shape requirements above is invertible.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Matrix inverse (&amp;lt;apll&amp;gt;⌹R&amp;lt;/apll&amp;gt;) and matrix division (&amp;lt;apll&amp;gt;L⌹R&amp;lt;/apll&amp;gt;) on &#039;&#039;&#039;Rational&#039;&#039;&#039;, &#039;&#039;&#039;VFP&#039;&#039;&#039;, or &#039;&#039;&#039;Ball&#039;&#039;&#039; arguments each have two limitations above and beyond that of normal conformability:&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;&amp;lt;p&amp;gt;for a &#039;&#039;&#039;square&#039;&#039;&#039; (&amp;lt;apll&amp;gt;=/⍴R&amp;lt;/apll&amp;gt;) right argument that it be non-singular, and&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;&amp;lt;p&amp;gt;for an &#039;&#039;&#039;overdetermined&#039;&#039;&#039; (&amp;lt;apll&amp;gt;&amp;amp;gt;/⍴R&amp;lt;/apll&amp;gt;) or &#039;&#039;&#039;underdetermined&#039;&#039;&#039; (&amp;lt;apll&amp;gt;&amp;amp;lt;/⍴R&amp;lt;/apll&amp;gt;) right argument that the symmetric matrix &amp;lt;apll&amp;gt;(⍉R)+.×R&amp;lt;/apll&amp;gt; be non-singular.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
    &amp;lt;p&amp;gt;These limitations are due to the algorithm ([http://en.wikipedia.org/wiki/Gauss%E2%80%93Jordan_elimination Gauss-Jordan Elimination]) used to implement Matrix Inverse/Divide on Rational and VFP numbers.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Overdetermined matrices are evaluated equivalently to the expression &amp;lt;apll&amp;gt;(⌹(⍉R)+.×R)+.×⍉R&amp;lt;/apll&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Underdetermined matrices are evaluated equivalently to the expression &amp;lt;apll&amp;gt;(⍉R)+.×⌹R+.×⍉R&amp;lt;/apll&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For example,&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      ⌹3 3{rho}0&lt;br /&gt;
 0 0 0&lt;br /&gt;
 0 0 0&lt;br /&gt;
 0 0 0&lt;br /&gt;
      ⌹3 3⍴1 2 3 4&lt;br /&gt;
¯0.1944444444   0.2777777778   0.02777777778&lt;br /&gt;
 0.05555555556 ¯0.2222222222   0.2777777778&lt;br /&gt;
 0.3611111111   0.05555555556 ¯0.1944444444&lt;br /&gt;
      ⌹3 3⍴1 2 3 4&amp;lt;pn&amp;gt;x&amp;lt;/pn&amp;gt;&lt;br /&gt;
¯7&amp;lt;pn&amp;gt;r&amp;lt;/pn&amp;gt;36  5&amp;lt;pn&amp;gt;r&amp;lt;/pn&amp;gt;18  1&amp;lt;pn&amp;gt;r&amp;lt;/pn&amp;gt;36&lt;br /&gt;
 1&amp;lt;pn&amp;gt;r&amp;lt;/pn&amp;gt;18 ¯2&amp;lt;pn&amp;gt;r&amp;lt;/pn&amp;gt;9   5&amp;lt;pn&amp;gt;r&amp;lt;/pn&amp;gt;18&lt;br /&gt;
13&amp;lt;pn&amp;gt;r&amp;lt;/pn&amp;gt;36  1&amp;lt;pn&amp;gt;r&amp;lt;/pn&amp;gt;18 ¯7&amp;lt;pn&amp;gt;r&amp;lt;/pn&amp;gt;36&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; rules=&amp;quot;none&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
    &amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;apll&amp;gt;Z←L⌹R&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;returns the quotient of the left and right arguments.  This quotient can be interpreted in various ways, such as the least squares solution of the system of linear equations determined by arguments.&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; is a numeric scalar, vector or matrix; otherwise signal a &amp;lt;apll&amp;gt;RANK ERROR&amp;lt;/apll&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; is a numeric scalar, vector or matrix; otherwise signal a &amp;lt;apll&amp;gt;RANK ERROR&amp;lt;/apll&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;If either &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; is a scalar or vector, it is coerced to a matrix by &amp;lt;apll&amp;gt;(L R)←⍪{each}L R&amp;lt;/apll&amp;gt;.  After this coercion, if the two matrices have a different number of rows, signal a &amp;lt;apll&amp;gt;LENGTH ERROR&amp;lt;/apll&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;Z&amp;lt;/apll&amp;gt; is a numeric array.  Before the above coercion of &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;, the rank of &amp;lt;apll&amp;gt;Z&amp;lt;/apll&amp;gt; is &amp;lt;apll&amp;gt;¯2+2⌈(⍴⍴L)+⍴⍴R&amp;lt;/apll&amp;gt;, and the shape is &amp;lt;apll&amp;gt;(1↓⍴R),1↓⍴L&amp;lt;/apll&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;This feature implements matrix division on &#039;&#039;&#039;Boolean&#039;&#039;&#039;, &#039;&#039;&#039;integer&#039;&#039;&#039; and &#039;&#039;&#039;floating point&#039;&#039;&#039; arguments using [http://www.gnu.org/software/gsl/manual/html_node/Singular-Value-Decomposition.html Singular Value Decomposition].  In particular, this means that any two numeric arrays meeting the rank and shape requirements above are divisible.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;As noted above, Matrix Division on &#039;&#039;&#039;Rational&#039;&#039;&#039;, &#039;&#039;&#039;VFP&#039;&#039;&#039;, or &#039;&#039;&#039;Ball&#039;&#039;&#039; arguments uses a different algorithm and has slightly more restrictive conformability requirements.&amp;lt;/p&amp;gt;&lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;&amp;lt;p&amp;gt;for a &#039;&#039;&#039;square&#039;&#039;&#039; (&amp;lt;apll&amp;gt;=/⍴R&amp;lt;/apll&amp;gt;) right argument that it be non-singular, and&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
      &amp;lt;li&amp;gt;&amp;lt;p&amp;gt;for an &#039;&#039;&#039;overdetermined&#039;&#039;&#039; (&amp;lt;apll&amp;gt;&amp;amp;gt;/⍴R&amp;lt;/apll&amp;gt;) or &#039;&#039;&#039;underdetermined&#039;&#039;&#039; (&amp;lt;apll&amp;gt;&amp;amp;lt;/⍴R&amp;lt;/apll&amp;gt;) right argument that the symmetric matrix &amp;lt;apll&amp;gt;(⍉R)+.×R&amp;lt;/apll&amp;gt; be non-singular.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Overdetermined matrices are evaluated equivalently to the expression &amp;lt;apll&amp;gt;(⌹(⍉R)+.×R)+.×(⍉R)+.×L&amp;lt;/apll&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;Underdetermined matrices are evaluated equivalently to the expression &amp;lt;apll&amp;gt;(⍉R)+.×⌹R+.×(⍉R)+.×L&amp;lt;/apll&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For example,&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      a←3 3⍴0&lt;br /&gt;
      a⌹a&lt;br /&gt;
 0 0 0&lt;br /&gt;
 0 0 0&lt;br /&gt;
 0 0 0&lt;br /&gt;
      1 2 3⌹3 3⍴1 2 3 4&lt;br /&gt;
0.4444444444 0.4444444444 ¯0.1111111111&lt;br /&gt;
      1 2 3⌹3 3⍴1 2 3 4&amp;lt;pn&amp;gt;x&amp;lt;/pn&amp;gt;&lt;br /&gt;
4&amp;lt;pn&amp;gt;r&amp;lt;/pn&amp;gt;9 4&amp;lt;pn&amp;gt;r&amp;lt;/pn&amp;gt;9 ¯1&amp;lt;pn&amp;gt;r&amp;lt;/pn&amp;gt;9&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr width=35%&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;big&amp;gt;For several more everyday problem-solving examples using Matrix Inverse see also &#039;&#039;&#039;[[Symbol_Domino|Domino Symbol ⌹]]&#039;&#039;&#039;.&amp;lt;/big&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;hr width=35%&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Article footer|1|Matrix}}&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Variant&amp;diff=3683</id>
		<title>Variant</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Variant&amp;diff=3683"/>
		<updated>2019-10-16T16:15:35Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: add cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Caution:&#039;&#039;&#039; Be careful not to confuse this symbol, which is &amp;lt;apll&amp;gt;⍠&amp;lt;/apll&amp;gt;, with &amp;lt;apll&amp;gt;⌹&amp;lt;/apll&amp;gt; which is [[Matrix Inverse/Divide]].&lt;br /&gt;
&amp;lt;hr /&amp;gt;&amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; rules=&amp;quot;none&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
    &amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;apll&amp;gt;Z←f⍠B R&amp;lt;/apll&amp;gt; &amp;amp;nbsp;&amp;amp;nbsp; or &amp;amp;nbsp;&amp;amp;nbsp; &amp;lt;apll&amp;gt;Z←L f⍠B R&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;evaluates &amp;lt;apll&amp;gt;f R&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;L f R&amp;lt;/apll&amp;gt; in the context described by &amp;lt;apll&amp;gt;B&amp;lt;/apll&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; are arbitrary arrays conformable with &amp;lt;apll&amp;gt;f&amp;lt;/apll&amp;gt;, and &amp;lt;apll&amp;gt;B&amp;lt;/apll&amp;gt; is a simple scalar, simple or heterogeneous vector, or nested vector.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;f&amp;lt;/apll&amp;gt; is an arbitrary function.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Introduction==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The dyadic Variant operator creates a version of the function &amp;lt;apll&amp;gt;f&amp;lt;/apll&amp;gt; with a set of properties bound and localized to it as specified by the array right operand.  For example, &amp;lt;apll&amp;gt;⍳⍠0&amp;lt;/apll&amp;gt; is a version of &amp;lt;apll&amp;gt;⍳&amp;lt;/apll&amp;gt; that executes in origin-0 independent of the current value of &amp;lt;apll&amp;gt;⎕IO&amp;lt;/apll&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The array right operand to the operator may take several different forms depending upon the function left operand.  In the general case, for any kind of function left operand, the right operand may specify a single property in the form of &amp;lt;apll&amp;gt;Key Val&amp;lt;/apll&amp;gt;, or multiple properties in the form of &amp;lt;apll&amp;gt;(Key1 Val1) (Key2 Val2)&amp;lt;/apll&amp;gt;&amp;lt;b&amp;gt;&amp;amp;#8230;&amp;lt;/b&amp;gt;, or if the left operand is a primitive function, a shorthand notation may be used as in &amp;lt;apll&amp;gt;Val&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;Val1 Val2&amp;lt;/apll&amp;gt; &amp;lt;b&amp;gt;&amp;amp;#8230;&amp;lt;/b&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;In the general case, the keys specify a property such as Index Origin as &amp;lt;apll&amp;gt;&#039;IO&#039;&amp;lt;/apll&amp;gt; or Comparison Tolerance as &amp;lt;apll&amp;gt;&#039;CT&#039;&amp;lt;/apll&amp;gt;, and the value part specifies a value appropriate to the property specified in the matching key.  At the moment, the keys that may be used are &amp;lt;apll&amp;gt;&#039;CT&#039;&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;&#039;DT&#039;&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;&#039;FPC&#039;&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;&#039;IO&#039;&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;&#039;LR&#039;&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;&#039;PP&#039;&amp;lt;/apll&amp;gt;, and &amp;lt;apll&amp;gt;&#039;RL&#039;&amp;lt;/apll&amp;gt; which stand for the corresponding system variable.  Note that for the Variants of &amp;lt;apll&amp;gt;L×R&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;⌹R&amp;lt;/apll&amp;gt; and the Subsequence variants such as &amp;lt;apll&amp;gt;L⍳⍠&#039;a&#039; R&amp;lt;/apll&amp;gt; there are no corresponding system variables as yet.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      1 2 (3+1e¯9)&amp;amp;nbsp; 3⍳⍠((&#039;IO&#039; 0) (&#039;CT&#039; 1e¯10)) 3&lt;br /&gt;
3&lt;br /&gt;
      1 2 (3+1e¯10) 3⍳⍠((&#039;IO&#039; 0) (&#039;CT&#039; 1e¯10)) 3&lt;br /&gt;
2&lt;br /&gt;
      ⍳⍠(&#039;IO&#039; 0) 3 &lt;br /&gt;
0 1 2 &lt;br /&gt;
      ⍳⍠(&#039;IO&#039; 1) 3 &lt;br /&gt;
1 2 3&lt;br /&gt;
      ⍳⍠(&#039;IO&#039; 0) ⍠(&#039;IO&#039; 1) 3 &lt;br /&gt;
0 1 2 &lt;br /&gt;
      ⍳⍠(&#039;IO&#039; 1) ⍠(&#039;IO&#039; 0) 3 &lt;br /&gt;
1 2 3&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Note that in the last two examples, the lefthand (innermost) value of &amp;lt;apll&amp;gt;⎕IO&amp;lt;/apll&amp;gt; takes precedence.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Shorthand Notation==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;If the left operand is a primitive or derived function, the following shorthand notation may be used:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; rules=&amp;quot;all&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;th width=&amp;quot;20%&amp;quot;&amp;gt;Function or&amp;lt;br /&amp;gt;Principal Operator&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th width=&amp;quot;5%&amp;quot;&amp;gt;Right&amp;lt;br /&amp;gt;Arg&amp;lt;br /&amp;gt;Type&amp;lt;/th&amp;gt;&lt;br /&gt;
  &amp;lt;th width=&amp;quot;75%&amp;quot;&amp;gt;Meaning&amp;lt;/th&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;⍳R&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;i&amp;gt;N&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;⎕IO←&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;N&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td rowspan=&amp;quot;8&amp;quot;&amp;gt;&amp;lt;apll&amp;gt;L⍳R&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;i&amp;gt;N&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;⎕IO←&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;N&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;i&amp;gt;N1&amp;amp;nbsp;N2&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;⎕IO←&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;N1&amp;lt;/i&amp;gt; and &amp;lt;apll&amp;gt;⎕CT←&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;N2&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;i&amp;gt;C&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[#Subsequences|Subsequence]] &amp;lt;i&amp;gt;C&amp;lt;/i&amp;gt; (&amp;lt;apll&amp;gt;&#039;a&#039;&amp;lt;/apll&amp;gt; for Ascending, &amp;lt;apll&amp;gt;&#039;d&#039;&amp;lt;/apll&amp;gt; for Descending)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;i&amp;gt;N&amp;lt;/i&amp;gt;&amp;amp;nbsp;&amp;lt;i&amp;gt;C&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;⎕IO←&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;N&amp;lt;/i&amp;gt; and [[#Subsequences|Subsequence]] &amp;lt;i&amp;gt;C&amp;lt;/i&amp;gt; (&amp;lt;apll&amp;gt;&#039;a&#039;&amp;lt;/apll&amp;gt; for Ascending, &amp;lt;apll&amp;gt;&#039;d&#039;&amp;lt;/apll&amp;gt; for Descending)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;i&amp;gt;C&amp;lt;/i&amp;gt;&amp;amp;nbsp;&amp;lt;i&amp;gt;N&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;⎕IO←&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;N&amp;lt;/i&amp;gt; and [[#Subsequences|Subsequence]] &amp;lt;i&amp;gt;C&amp;lt;/i&amp;gt; (&amp;lt;apll&amp;gt;&#039;a&#039;&amp;lt;/apll&amp;gt; for Ascending, &amp;lt;apll&amp;gt;&#039;d&#039;&amp;lt;/apll&amp;gt; for Descending)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;i&amp;gt;N1&amp;amp;nbsp;N2&amp;amp;nbsp;C&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;⎕IO←&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;N1&amp;lt;/i&amp;gt;, &amp;lt;apll&amp;gt;⎕CT←&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;N2&amp;lt;/i&amp;gt;, and [[#Subsequences|Subsequence]] &amp;lt;i&amp;gt;C&amp;lt;/i&amp;gt; (&amp;lt;apll&amp;gt;&#039;a&#039;&amp;lt;/apll&amp;gt; for Ascending, &amp;lt;apll&amp;gt;&#039;d&#039;&amp;lt;/apll&amp;gt; for Descending)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;i&amp;gt;N1&amp;amp;nbsp;C&amp;amp;nbsp;N2&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;⎕IO←&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;N1&amp;lt;/i&amp;gt;, &amp;lt;apll&amp;gt;⎕CT←&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;N2&amp;lt;/i&amp;gt;, and [[#Subsequences|Subsequence]] &amp;lt;i&amp;gt;C&amp;lt;/i&amp;gt; (&amp;lt;apll&amp;gt;&#039;a&#039;&amp;lt;/apll&amp;gt; for Ascending, &amp;lt;apll&amp;gt;&#039;d&#039;&amp;lt;/apll&amp;gt; for Descending)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;i&amp;gt;C&amp;amp;nbsp;N1&amp;amp;nbsp;N2&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;⎕IO←&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;N1&amp;lt;/i&amp;gt;, &amp;lt;apll&amp;gt;⎕CT←&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;N2&amp;lt;/i&amp;gt;, and [[#Subsequences|Subsequence]] &amp;lt;i&amp;gt;C&amp;lt;/i&amp;gt; (&amp;lt;apll&amp;gt;&#039;a&#039;&amp;lt;/apll&amp;gt; for Ascending, &amp;lt;apll&amp;gt;&#039;d&#039;&amp;lt;/apll&amp;gt; for Descending)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;L⌷R&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;L⍉R&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;⍋R&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;L⍋R&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;⍒R&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;L⍒R&amp;lt;/apll&amp;gt;,&amp;lt;br /&amp;gt;&amp;lt;apll&amp;gt;L⊃R&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;⍸R&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;LπR&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;a‼R&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;i&amp;gt;N&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;⎕IO←&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;N&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;⍕R&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;L⍕R&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;i&amp;gt;N&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;⎕PP←&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;N&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;&amp;lt;apll&amp;gt;L&amp;amp;lt;R&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;L≤R&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;L=R&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;L≠R&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;L≥R&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;L&amp;amp;gt;R&amp;lt;/apll&amp;gt;,&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;L∊R&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;L≡R&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;L≢R&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;L∪R&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;L∩R&amp;lt;/apll&amp;gt;,&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;L⊆R&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;L⊇R&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;L§R&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;L~R&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;L⍷R&amp;lt;/apll&amp;gt;,&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;⌊R&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;⌈R&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;∪R&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;i&amp;gt;N&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;⎕CT←&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;N&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td rowspan=&amp;quot;4&amp;quot;&amp;gt;&amp;lt;apll&amp;gt;L|R&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;f⌻R&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;L f⌻R&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;∘⌻R&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;i&amp;gt;N&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;⎕CT←&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;N&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;i&amp;gt;C&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;⎕LR←&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;C&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;i&amp;gt;N C&amp;lt;/i&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;⎕CT←&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;N&amp;lt;/i&amp;gt; and &amp;lt;apll&amp;gt;⎕LR←&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;C&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;i&amp;gt;C N&amp;lt;/i&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;⎕CT←&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;N&amp;lt;/i&amp;gt; and &amp;lt;apll&amp;gt;⎕LR←&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;C&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td rowspan=&amp;quot;8&amp;quot;&amp;gt;&amp;lt;apll&amp;gt;?R&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;L?R&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;i&amp;gt;N&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;⎕IO←&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;N&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;i&amp;gt;N1&amp;amp;nbsp;N2&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;⎕IO←&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;N1&amp;lt;/i&amp;gt; and &amp;lt;apll&amp;gt;⎕RL←&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;N2&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;i&amp;gt;C&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;⎕DT←&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;C&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;i&amp;gt;N C&amp;lt;/i&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;⎕IO←&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;N&amp;lt;/i&amp;gt; and &amp;lt;apll&amp;gt;⎕DT←&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;C&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;i&amp;gt;C N&amp;lt;/i&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;⎕IO←&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;N&amp;lt;/i&amp;gt; and &amp;lt;apll&amp;gt;⎕DT←&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;C&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;i&amp;gt;N1&amp;amp;nbsp;N2&amp;amp;nbsp;C&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;⎕IO←&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;N1&amp;lt;/i&amp;gt;, &amp;lt;apll&amp;gt;⎕RL←&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;N2&amp;lt;/i&amp;gt;, and &amp;lt;apll&amp;gt;⎕DT←&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;C&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;i&amp;gt;N1&amp;amp;nbsp;C&amp;amp;nbsp;N2&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;⎕IO←&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;N1&amp;lt;/i&amp;gt;, &amp;lt;apll&amp;gt;⎕RL←&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;N2&amp;lt;/i&amp;gt;, and &amp;lt;apll&amp;gt;⎕DT←&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;C&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;i&amp;gt;C&amp;amp;nbsp;N1&amp;amp;nbsp;N2&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;⎕IO←&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;N1&amp;lt;/i&amp;gt;, &amp;lt;apll&amp;gt;⎕RL←&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;N2&amp;lt;/i&amp;gt;, and &amp;lt;apll&amp;gt;⎕DT←&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;C&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td rowspan=&amp;quot;2&amp;quot;&amp;gt;&amp;lt;apll&amp;gt;!R&amp;lt;/apll&amp;gt; ([https://en.wikipedia.org/wiki/Pochhammer_k-symbol Pochhammer k-symbol])&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;i&amp;gt;N&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[#Rising_and_Falling_Factorials|Rising (&amp;lt;i&amp;gt;N&amp;lt;/i&amp;gt; &amp;amp;gt; 0) and Falling (&amp;lt;i&amp;gt;N&amp;lt;/i&amp;gt; &amp;amp;lt; 0) factorial]] of length &amp;lt;apll&amp;gt;|&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;N&amp;lt;/i&amp;gt;, stepping by &amp;lt;apll&amp;gt;1&amp;lt;/apll&amp;gt; in the direction of &amp;lt;i&amp;gt;N&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;i&amp;gt;N1&amp;amp;nbsp;N2&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;[[#Rising_and_Falling_Factorials|Rising (&amp;lt;i&amp;gt;N1&amp;lt;/i&amp;gt; &amp;amp;gt; 0) and Falling (&amp;lt;i&amp;gt;N1&amp;lt;/i&amp;gt; &amp;amp;lt; 0) factorial]] of length &amp;lt;apll&amp;gt;|&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;N1&amp;lt;/i&amp;gt;, stepping by &amp;lt;apll&amp;gt;|&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;N2&amp;lt;/i&amp;gt; in the direction of &amp;lt;i&amp;gt;N1&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;⍎R&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;i&amp;gt;N&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;⎕FPC←&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;N&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;L÷R&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;L∨R&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;L∧R&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;L○R&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;L⊤R&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;i&amp;gt;C&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;⎕LR←&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;C&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;L×R&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;i&amp;gt;C&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Except for &amp;lt;b&amp;gt;Dot Product&amp;lt;/b&amp;gt;, these variants are non-trivial only when multiplying &amp;lt;b&amp;gt;Non-commutative&amp;lt;/b&amp;gt; numbers.&amp;lt;br /&amp;gt;The following definitions on scalar &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; extend to higher rank arrays in the usual way.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
    &amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; rules=&amp;quot;all&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;th&amp;gt;&amp;lt;i&amp;gt;C&amp;lt;/i&amp;gt;&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;th&amp;gt;Name&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;th&amp;gt;Quaternion/Octonion &amp;amp;mdash; Non-commutative&amp;lt;/th&amp;gt;&lt;br /&gt;
        &amp;lt;th&amp;gt;Real/Complex &amp;amp;mdash; Commutative&amp;lt;/th&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;&#039;i&#039;&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;I&amp;lt;/b&amp;gt;nterior product&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;((L×R)+R×L)÷2&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
       &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;L×R&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;&#039;e&#039;&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;E&amp;lt;/b&amp;gt;xterior product&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;((L×R)-R×L)÷2&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;0&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;&#039;x&#039;&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;Cross&amp;lt;/b&amp;gt; product&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;¯9○&amp;amp;lt;(∘⌻¯9○L)+.×&amp;amp;gt;¯9○R&amp;lt;/apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;b&amp;gt;Quaternions only&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;where &amp;lt;apll&amp;gt;¯9○R&amp;lt;/apll&amp;gt; returns &amp;lt;apll&amp;gt;(R-+R)÷2&amp;lt;/apll&amp;gt;, i.e. as a pure imaginary number&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;0&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;&#039;d&#039;&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;D&amp;lt;/b&amp;gt;ot product&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;(&amp;amp;gt;L)+.×&amp;amp;gt;R&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;(same)&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
      &amp;lt;tr&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;&#039;c&#039;&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&amp;lt;b&amp;gt;C&amp;lt;/b&amp;gt;onjugation product&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;L×R÷L&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
        &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;⌹R&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;i&amp;gt;N&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;where &amp;lt;i&amp;gt;N&amp;lt;/i&amp;gt; may be &amp;lt;apll&amp;gt;1&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;2&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;3&amp;lt;/apll&amp;gt;, or &amp;lt;apll&amp;gt;4&amp;lt;/apll&amp;gt;.  &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; must be a square simple Real numeric matrix.  If &amp;lt;i&amp;gt;N&amp;lt;/i&amp;gt; is &amp;lt;apll&amp;gt;1&amp;lt;/apll&amp;gt;, the result is a Complex floating point vector of the [https://en.wikipedia.org/wiki/Eigenvalues_and_eigenvectors Eigenvalues] of &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;.  If &amp;lt;i&amp;gt;N&amp;lt;/i&amp;gt; is 2, the result is a Complex floating point matrix of the [https://en.wikipedia.org/wiki/Eigenvalues_and_eigenvectors Eigenvectors] of &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;, one per column.  If &amp;lt;i&amp;gt;N&amp;lt;/i&amp;gt; is &amp;lt;apll&amp;gt;3&amp;lt;/apll&amp;gt;, the result is a two-element nested vector with a Complex vector of the Eigenvalues in the first element and a Complex matrix of the Eigenvectors in the second.  If &amp;lt;i&amp;gt;N&amp;lt;/i&amp;gt; is &amp;lt;apll&amp;gt;4&amp;lt;/apll&amp;gt;, the result is a three-element nested vector with a Complex vector of the Eigenvalues in the first element, a Complex matrix of the Eigenvectors in the second, and a Real matrix of the Schur vectors in the third.  For more details see [[#Eigenvalues_and_Eigenvectors|Eigenvalues and Eigenvectors]].&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt;.&amp;lt;i&amp;gt;g&amp;lt;/i&amp;gt;/0⍴⊂R&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;i&amp;gt;C&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;⎕LR←&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;C&amp;lt;/i&amp;gt; &amp;amp;mdash; this value is used only when the identity function for inner product is called so as to distinguish the Left identity element from the Right.  For example, with &amp;lt;apll&amp;gt;R←3 4⍴⍳12&amp;lt;/apll&amp;gt;, the expression &amp;lt;apll&amp;gt;⊃+.×⍠&#039;l&#039;/0⍴⊂R&amp;lt;/apll&amp;gt; produces the Left identity element (which is a &amp;lt;apll&amp;gt;3&amp;lt;/apll&amp;gt; by &amp;lt;apll&amp;gt;3&amp;lt;/apll&amp;gt; identity matix) and &amp;lt;apll&amp;gt;⊃+.×⍠&#039;r&#039;/0⍴⊂R&amp;lt;/apll&amp;gt; produces the Right identity element (which is a &amp;lt;apll&amp;gt;4&amp;lt;/apll&amp;gt; by &amp;lt;apll&amp;gt;4&amp;lt;/apll&amp;gt; identity matrix).  The actual values in the result are dependent on the functions &amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt; and &amp;lt;i&amp;gt;g&amp;lt;/i&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Subsequences==&lt;br /&gt;
&lt;br /&gt;
===Ascending===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;An Ascending subsequence of one vector in another (&amp;lt;apll&amp;gt;L⍳⍠&#039;a&#039; R&amp;lt;/apll&amp;gt;) is a set of indices of &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; (barring items Not Found) such that &amp;lt;apll&amp;gt;R≡L[L⍳⍠&#039;a&#039; R]&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;∧/2&amp;amp;lt;/L⍳⍠&#039;a&#039; R&amp;lt;/apll&amp;gt;, that is the indices are monotonically increasing.  This primitive is written such that it returns the smallest values that satisfy the above conditions.  All datatypes are valid for the left and right arguments; the result is always an integer vector of the same length as &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      L←2 7 1 5 7 1 2 1 7 1&lt;br /&gt;
      R←5 2 7 1&lt;br /&gt;
      L⍳⍠&#039;a&#039; R&lt;br /&gt;
4 7 9 10&lt;br /&gt;
      L[L⍳⍠&#039;a&#039; R]&lt;br /&gt;
5 2 7 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;If an element in &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; is Not Found, the corresponding value in the result is &amp;lt;apll&amp;gt;⎕IO+⍴L&amp;lt;/apll&amp;gt;.  Moreover, if an element in &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; is Not Found, then all following elements in &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; are also Not Found.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Continuing the above example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      LL←L,3&lt;br /&gt;
      RR←R,9 3&lt;br /&gt;
      LL⍳⍠&#039;a&#039; RR&lt;br /&gt;
4 7 9 10 12 12&lt;br /&gt;
      (LL,&#039;?&#039;)[LL⍳⍠&#039;a&#039; RR]&lt;br /&gt;
5 2 7 1 ??&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Descending===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;A Descending subsequence of one vector in another (&amp;lt;apll&amp;gt;L⍳⍠&#039;d&#039; R&amp;lt;/apll&amp;gt;) is a set of indices of &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; (barring items Not Found) such that &amp;lt;apll&amp;gt;R≡L[L⍳⍠&#039;d&#039; R]&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;∧/2&amp;amp;gt;/L⍳⍠&#039;d&#039; R&amp;lt;/apll&amp;gt;, that is the indices are monotonically decreasing.  This primitive is written such that it returns the largest values that satisfy the above conditions.  All datatypes are valid for the left and right arguments; the result is always an integer vector of the same length as &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      L←1 2 5 7 2 1 5 7 1 2 5 5 1 2 7&lt;br /&gt;
      R←5 2 7 1&lt;br /&gt;
      L⍳⍠&#039;d&#039; R&lt;br /&gt;
12 10 8 6&lt;br /&gt;
      L[L⍳⍠&#039;d&#039; R]&lt;br /&gt;
5 2 7 1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;If an element in &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; is Not Found, the corresponding value in the result is &amp;lt;apll&amp;gt;⎕IO-1&amp;lt;/apll&amp;gt;.  Moreover, if an element in &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; is Not Found, then all following elements in &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; are also Not Found.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Continuing the above example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      LL←3,L&lt;br /&gt;
      RR←R,9 3&lt;br /&gt;
      LL⍳⍠&#039;d&#039; RR&lt;br /&gt;
13 11 9 7 0 0&lt;br /&gt;
      (&#039;?&#039;,LL)[1+LL⍳⍠&#039;d&#039; RR]&lt;br /&gt;
5 2 7 1 ??&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Combining Variants===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Dyadic Iota allows several other Variants such as setting the Index Origin and Comparison Tolerance.  They may be combined into one right operand, for example, any of the following expressions&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;      L⍳⍠(0 1E¯10 &#039;d&#039;) R&amp;lt;/apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; or&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;      L⍳⍠(0 &#039;d&#039; 1E¯10) R&amp;lt;/apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp; or&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;      L⍳⍠(&#039;d&#039; 0 1E¯10) R&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;may be used to find a Descending Subsequence in origin-0 using a Comparison Tolerance of &amp;lt;apll&amp;gt;1E¯10&amp;lt;/apll&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The order of the two numeric values is important:  if there is only one number in the right operand, it is applied to the Index Origin; if there are two numbers, the first is applied to the Index Origin and the second to the Comparison Tolerance.  The character value may appear anywhere in the right operand &amp;amp;mdash; however if a second character-valued Variant were defined for Dyadic Iota, then the two character values would also be order-dependent.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Identities For Subsequences===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The following identities hold in either Index Origin even if there are Not Found values in the result:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;      (L⍳⍠&#039;a&#039; R)≡(1 ¯1[1]+⍴L)-(⌽L)⍳⍠&#039;d&#039; R&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;      (L⍳⍠&#039;d&#039; R)≡(1 ¯1[1]+⍴L)-(⌽L)⍳⍠&#039;a&#039; R&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Rising and Falling Factorials==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;A falling factorial is like a normal factorial except that it subtracts the step value (by default &amp;lt;apll&amp;gt;1&amp;lt;/apll&amp;gt; unless overridden) from the original number for a fixed # of iterations.  That is, &amp;lt;apll&amp;gt;!6&amp;lt;/apll&amp;gt; successively decrements &amp;lt;apll&amp;gt;6&amp;lt;/apll&amp;gt; by &amp;lt;apll&amp;gt;1&amp;lt;/apll&amp;gt; and multiplies the numbers &amp;lt;apll&amp;gt;6 5 4 3 2 1&amp;lt;/apll&amp;gt; to get &amp;lt;apll&amp;gt;720&amp;lt;/apll&amp;gt;.  A falling factorial starting with &amp;lt;apll&amp;gt;6&amp;lt;/apll&amp;gt; of length (say) &amp;lt;apll&amp;gt;3&amp;lt;/apll&amp;gt; multiplies &amp;lt;apll&amp;gt;6 5 4&amp;lt;/apll&amp;gt; to get &amp;lt;apll&amp;gt;120&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;A rising factorial is like a falling factorial except it adds the step value (by default &amp;lt;apll&amp;gt;1&amp;lt;/apll&amp;gt; unless overridden) instead of subtracting it.  A rising factorial starting with &amp;lt;apll&amp;gt;6&amp;lt;/apll&amp;gt; of length (say) &amp;lt;apll&amp;gt;3&amp;lt;/apll&amp;gt; multiplies &amp;lt;apll&amp;gt;6 7 8&amp;lt;/apll&amp;gt; to get &amp;lt;apll&amp;gt;336&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Here are some examples of the falling factorial&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      !6 &lt;br /&gt;
720 &lt;br /&gt;
      (!⍠¯6)6 ⍝ ×/6 5 4 3 2 1 &lt;br /&gt;
720 &lt;br /&gt;
      (!⍠¯5)6 ⍝ ×/6 5 4 3 2 &lt;br /&gt;
720 &lt;br /&gt;
      (!⍠¯4)6 ⍝ ×/6 5 4 3 &lt;br /&gt;
360 &lt;br /&gt;
      (!⍠¯3)6 ⍝ ×/6 5 4 &lt;br /&gt;
120 &lt;br /&gt;
      (!⍠¯2)6 ⍝ ×/6 5&lt;br /&gt;
30 &lt;br /&gt;
      (!⍠¯1)6 ⍝ ×/6 &lt;br /&gt;
6 &lt;br /&gt;
      (!⍠¯0)6 ⍝ ×/⍬ &lt;br /&gt;
1 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;and now falling by &amp;lt;apll&amp;gt;2&amp;lt;/apll&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      (!⍠(¯6 2))6 ⍝ ×/6 4 2 0 ¯2 ¯4 &lt;br /&gt;
0 &lt;br /&gt;
      (!⍠(¯5 2))6 ⍝ ×/6 4 2 0 ¯2 &lt;br /&gt;
0 &lt;br /&gt;
      (!⍠(¯4 2))6 ⍝ ×/6 4 2 0 &lt;br /&gt;
0 &lt;br /&gt;
      (!⍠(¯3 2))6 ⍝ ×/6 4 2 &lt;br /&gt;
48 &lt;br /&gt;
      (!⍠(¯2 2))6 ⍝ ×/6 4 &lt;br /&gt;
24 &lt;br /&gt;
      (!⍠(¯1 2))6 ⍝ ×/6 &lt;br /&gt;
6 &lt;br /&gt;
      (!⍠(¯0 2))6 ⍝ ×/⍬ &lt;br /&gt;
1 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;and here are some examples of the rising factorial&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      (!⍠6)6 ⍝ ×/6 7 8 9 10 11 &lt;br /&gt;
332640 &lt;br /&gt;
      (!⍠5)6 ⍝ ×/6 7 8 9 10 &lt;br /&gt;
30240 &lt;br /&gt;
      (!⍠4)6 ⍝ ×/6 7 8 9 &lt;br /&gt;
3024 &lt;br /&gt;
      (!⍠3)6 ⍝ ×/6 7 8 &lt;br /&gt;
336 &lt;br /&gt;
      (!⍠2)6 ⍝ ×/6 7&lt;br /&gt;
42&lt;br /&gt;
      (!⍠1)6 ⍝ ×/6&lt;br /&gt;
6&lt;br /&gt;
      (!⍠0)6 ⍝ ×/⍬&lt;br /&gt;
1 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;and now rising by &amp;lt;apll&amp;gt;2&amp;lt;/apll&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      (!⍠(6 2))6 ⍝ ×/6 8 10 12 14 16 &lt;br /&gt;
1290240 &lt;br /&gt;
      (!⍠(5 2))6 ⍝ ×/6 8 10 12 14 &lt;br /&gt;
80640 &lt;br /&gt;
      (!⍠(4 2))6 ⍝ ×/6 8 10 12 &lt;br /&gt;
5760 &lt;br /&gt;
      (!⍠(3 2))6 ⍝ ×/6 8 10 &lt;br /&gt;
480 &lt;br /&gt;
      (!⍠(2 2))6 ⍝ ×/6 8 &lt;br /&gt;
48 &lt;br /&gt;
      (!⍠(1 2))6 ⍝ ×/6 &lt;br /&gt;
6 &lt;br /&gt;
      (!⍠(0 2))6 ⍝ ×/⍬ &lt;br /&gt;
1 &lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Identities For Rising and Falling Factorials===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;5&amp;quot; rules=&amp;quot;none&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;(!⍠N)R&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;&amp;amp;nbsp; ←→ &amp;amp;nbsp;&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;(!⍠(N 1))R&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;(!⍠(N 0))R&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;&amp;amp;nbsp; ←→ &amp;amp;nbsp;&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;R*N&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;(!⍠(N1,N2))R&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;&amp;amp;nbsp; ←→ &amp;amp;nbsp;&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;(!⍠(N1,|N2))R&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;(the sign of &amp;lt;apll&amp;gt;N2&amp;lt;/apll&amp;gt; is ignored)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Eigenvalues and Eigenvectors==&lt;br /&gt;
&lt;br /&gt;
These [https://en.wikipedia.org/wiki/Eigenvalues_and_eigenvectors concepts] from Linear Algebra and Matrix Theory define the characteristic values and vectors of the linear transformation represented by a matrix.  Every square simple Real numeric matrix has Eigenvalues and Eigenvectors.  To calculate these objects, use the Variant operator with a left operand of the Domino function and a right operand of an integer scalar according to the following table:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;5&amp;quot; rules=&amp;quot;all&amp;quot; summary=&amp;quot;&amp;quot; style=&amp;quot;&amp;quot;border:1px solid black;&amp;quot;&lt;br /&gt;
|&amp;lt;apll&amp;gt;Z←(⌹⍠1) R&amp;lt;/apll&amp;gt;||&amp;lt;apll&amp;gt;Z&amp;lt;/apll&amp;gt; is a Complex floating point vector of the Eigenvalues of &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;apll&amp;gt;Z←(⌹⍠2) R&amp;lt;/apll&amp;gt;||&amp;lt;apll&amp;gt;Z&amp;lt;/apll&amp;gt; is a Complex floating point matrix of the Eigenvectors of &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;, one per column&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;apll&amp;gt;Z←(⌹⍠3) R&amp;lt;/apll&amp;gt;||&amp;lt;apll&amp;gt;Z&amp;lt;/apll&amp;gt; is a two-element nested vector with a Complex floating point vector of the Eigenvalues in the first element and a Complex floating point matrix of the Eigenvectors in the second&lt;br /&gt;
|-&lt;br /&gt;
|&amp;lt;apll&amp;gt;Z←(⌹⍠4) R&amp;lt;/apll&amp;gt;||&amp;lt;apll&amp;gt;Z&amp;lt;/apll&amp;gt; is a three-element nested vector with a Complex floating point vector of the Eigenvalues in the first element, a Complex floating point matrix of the Eigenvectors in the second, and a Real matrix of the Schur vectors in the third&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For example, Eigenvalues and Eigenvectors can be used to calculate the factorial of a matrix:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;amp;ensp;       M←2 2⍴1 3 2 1&lt;br /&gt;
&amp;amp;ensp;       M&lt;br /&gt;
&amp;amp;ensp; 1 3&lt;br /&gt;
&amp;amp;ensp; 2 1&lt;br /&gt;
&amp;amp;ensp;       MatFact←{(Eval Evec)←(⌹⍠3) ⍵&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;➥&amp;lt;/span&amp;gt;⋄ Diag←∘⌻!Eval ⍝ Factorial of Eigenvalues on diagonal&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;➥&amp;lt;/span&amp;gt;⋄ Evec+.×Diag+.×⌹Evec}&lt;br /&gt;
&amp;amp;ensp;       MatFact M&lt;br /&gt;
&amp;amp;ensp; 3.6274 8.8423&lt;br /&gt;
&amp;amp;ensp; 5.8949 3.6274&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note that if we delete the Shriek function in &amp;lt;apll&amp;gt;MatFact&amp;lt;/apll&amp;gt;, the result is the original matrix argument.&lt;br /&gt;
&lt;br /&gt;
In turn, the function &amp;lt;apll&amp;gt;MatFact&amp;lt;/apll&amp;gt; can be used to calculate the Factorial of a HyperComplex number:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;amp;ensp;       HyperFact←{M←∘⌻⍵        ⍝ Matrix representation of a HyperComplex number&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;➥&amp;lt;/span&amp;gt;⋄ ⎕IO←1 ⋄ &amp;lt;9○1⌷[2] MatFact M  ⍝ Factorial ...&lt;br /&gt;
&amp;lt;span style=&amp;quot;color:blue;&amp;quot;&amp;gt;➥&amp;lt;/span&amp;gt;}&lt;br /&gt;
&amp;amp;ensp;       HyperFact 1i2&lt;br /&gt;
&amp;amp;ensp; 0.11229J0.32361&lt;br /&gt;
&amp;amp;ensp;       !1i2&lt;br /&gt;
&amp;amp;ensp; 0.11229J0.32361&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where the latter expression uses the Gnu Scientific Library Complex number routines to calculate the Factorial of a Complex number.&lt;br /&gt;
&lt;br /&gt;
In a similar manner, using the appropriate &amp;lt;apll&amp;gt;4×4&amp;lt;/apll&amp;gt; matrix representation of a Quaternion, its Factorial can be calculated which is the algorithm used in the implementation:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;amp;ensp;       HyperFact &amp;lt;⍳4&lt;br /&gt;
&amp;amp;ensp; 0.0060975i¯0.0010787j¯0.001618k¯0.0021573&lt;br /&gt;
&amp;amp;ensp;       !&amp;lt;⍳4&lt;br /&gt;
&amp;amp;ensp; 0.0060975i¯0.0010787j¯0.001618k¯0.0021573&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Article footer|9|Variant}}&lt;br /&gt;
[[Category:Operators]]&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=%E2%8D%A0&amp;diff=3682</id>
		<title>⍠</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=%E2%8D%A0&amp;diff=3682"/>
		<updated>2019-10-16T16:09:06Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: r to article&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Variant]]&lt;br /&gt;
&amp;lt;!-- Was Quad colon --&amp;gt;&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Operators&amp;diff=3681</id>
		<title>Operators</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Operators&amp;diff=3681"/>
		<updated>2019-10-16T15:39:08Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: add cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Operators are symbols used to perform an action based on the operands (functions, variables, or jots) to its left (monadic operator) or left and right (dyadic operator), along with the zero, one, or two arguments to the derived function from the operator.  That is, the derived function may be niladic (no arguments), monadic (right argument only), or dyadic (left and right arguments).  For example, &amp;lt;apll&amp;gt;⍨&amp;lt;/apll&amp;gt; is a monadic operator (a single operand on its left, e.g. &amp;lt;apll&amp;gt;f⍨&amp;lt;/apll&amp;gt;), and the derived function from this operator is ambivalent (that is, may be called with a right argument only as in &amp;lt;apll&amp;gt;f⍨ R&amp;lt;/apll&amp;gt; or both left and right arguments, as in &amp;lt;apll&amp;gt;L f⍨ R&amp;lt;/apll&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The list of monadic operators is as follows:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;apll&amp;gt;/&amp;lt;/apll&amp;gt; || [[Reduction]] || &amp;lt;apll&amp;gt;f/ R&amp;lt;/apll&amp;gt; || &amp;lt;apll&amp;gt;L f/ R&amp;lt;/apll&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;apll&amp;gt;\&amp;lt;/apll&amp;gt; || [[Scan]] || &amp;lt;apll&amp;gt;f\ R&amp;lt;/apll&amp;gt; || &amp;lt;apll&amp;gt;L f\ R&amp;lt;/apll&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;apll&amp;gt;¨&amp;lt;/apll&amp;gt; || [[Each]] || &amp;lt;apll&amp;gt;f¨ R&amp;lt;/apll&amp;gt; || &amp;lt;apll&amp;gt;L f¨ R&amp;lt;/apll&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;apll&amp;gt;⍨&amp;lt;/apll&amp;gt; || [[Commute-Duplicate|Duplicate/Commute]] || &amp;lt;apll&amp;gt;f⍨ R&amp;lt;/apll&amp;gt; || &amp;lt;apll&amp;gt;L f⍨ R&amp;lt;/apll&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;apll&amp;gt;⍦&amp;lt;/apll&amp;gt; || [[Multisets]] || &amp;lt;apll&amp;gt;f⍦ R&amp;lt;/apll&amp;gt; || &amp;lt;apll&amp;gt;L f⍦ R&amp;lt;/apll&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;apll&amp;gt;‼&amp;lt;/apll&amp;gt; || [[Combinatorial]] || &amp;lt;apll&amp;gt;v‼ R&amp;lt;/apll&amp;gt; ||&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;apll&amp;gt;⊙&amp;lt;/apll&amp;gt; || [[Null]] || &amp;lt;apll&amp;gt;f⊙ R&amp;lt;/apll&amp;gt; || &amp;lt;apll&amp;gt;L f⊙ R&amp;lt;/apll&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The list of dyadic operators is as follows:&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;apll&amp;gt;⍤&amp;lt;/apll&amp;gt; || [[Rank]] || &amp;lt;apll&amp;gt;f⍤w R&amp;lt;/apll&amp;gt; || &amp;lt;apll&amp;gt;L f⍤w R&amp;lt;/apll&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;apll&amp;gt;⍡&amp;lt;/apll&amp;gt; || [[Convolution]] || || &amp;lt;apll&amp;gt;L f⍡g R&amp;lt;/apll&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;apll&amp;gt;⍥&amp;lt;/apll&amp;gt; || [[Composition]] || || &amp;lt;apll&amp;gt;L f⍥g R&amp;lt;/apll&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;apll&amp;gt;.&amp;lt;/apll&amp;gt; || [[Determinant_Operator|Determinant&amp;lt;br /&amp;gt;Inner Product&amp;lt;br /&amp;gt;Outer product]] || &amp;lt;apll&amp;gt;f.g R&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt; || &amp;lt;br /&amp;gt;&amp;lt;apll&amp;gt;L f.g R&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;apll&amp;gt;L ∘.g R&amp;lt;/apll&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;apll&amp;gt;∘&amp;lt;/apll&amp;gt; || [[Compose]] || &amp;lt;apll&amp;gt;f∘g R&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;apll&amp;gt;f∘w R&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;apll&amp;gt;v∘g R&amp;lt;/apll&amp;gt; || &amp;lt;apll&amp;gt;L f∘g R&amp;lt;/apll&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| &amp;lt;apll&amp;gt;⍠&amp;lt;/apll&amp;gt; || [[Variant]] || &amp;lt;apll&amp;gt;f⍠w R&amp;lt;/apll&amp;gt; || &amp;lt;apll&amp;gt;L f⍠w R&amp;lt;/apll&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Where &amp;lt;apll&amp;gt;f&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;g&amp;lt;/apll&amp;gt; represent functions and &amp;lt;apll&amp;gt;v&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;w&amp;lt;/apll&amp;gt; represent variables.&lt;br /&gt;
&lt;br /&gt;
{{Article footer|0|NO}}&lt;br /&gt;
&lt;br /&gt;
{{stub}}&lt;br /&gt;
[[Category:Examples]][[Category:Definitions]]&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Introduction_to_APL&amp;diff=3680</id>
		<title>Introduction to APL</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Introduction_to_APL&amp;diff=3680"/>
		<updated>2019-10-16T15:32:04Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: make minor changes to correct errors&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the wonderful world of APL. Whether you&#039;ve never done programming before or you&#039;re a journeyman programmer, APL is going to be something new to you. APL works like no other programming language. First, if you&#039;ve done any programming, you &amp;quot;know&amp;quot; that when you have an assignment or something like a piece of code is executed, it&#039;s &amp;quot;always&amp;quot; done left to right and mathematical formulas are always evaluated left to right according to precedence, so that exponentiation is done first, then multiplication and division, then addition and subtraction.  Well, APL is going to blow you away because &#039;&#039;everything you know is wrong&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
First, APL is &amp;quot;backwards&amp;quot; to what you know. APL operates from &#039;&#039;right to left&#039;&#039;. All other programming languages operate from left to right. When it comes to computing mathematical formulas, APL has no precedence; unless you put something in parenthesis, all mathematical computations are done strictly right to left to produce the result.&lt;br /&gt;
&lt;br /&gt;
Also, APL uses a specialized set of symbols, and before we had graphical systems, it even had its own specialized keyboard. Many of the actions you have to write a program in other languages can be done in one character in APL. While your typical programming language would show 3 times 4 as &#039;&#039;&#039;3*4&#039;&#039;&#039;, APL has a multiply symbol, so it is written as &#039;&#039;&#039;3{times}4&#039;&#039;&#039;, and to create one half or &#039;&#039;&#039;1/2&#039;&#039;&#039; in most languages, in APL you would enter &#039;&#039;&#039;1{divide}2&#039;&#039;&#039; .&lt;br /&gt;
&lt;br /&gt;
So, for example, if you have the following mathematical expression&lt;br /&gt;
: 4*5-10 (in normal programming languages), or in APL: 4 {times} 5 - 10&lt;br /&gt;
Your typical programming language would compute it as 4{times}5 which is (20), then 20 - 10, resulting in 10.  APL will compute it as 5-10 (-5) * 4, or -20. You can adjust this by placing arguments within parenthesis. If your expression was written as&lt;br /&gt;
: (4 {times} 5) - 10&lt;br /&gt;
It would produce the same answer no matter what programming language you use.&lt;br /&gt;
&lt;br /&gt;
Where APL shines is its ability to handle arrays as easily as most programs handle single values.  For example, the &#039;&#039;&#039;plus reduce&#039;&#039;&#039; operator is used to sum a list of numbers, so in a typical programming language like C or C++ you&#039;d have&lt;br /&gt;
: K == 5 + 6 + 8 + 9 + 12 +14&lt;br /&gt;
In APL, you&#039;d do the same thing with&lt;br /&gt;
: K {:=} +/5 6 8 9 12 14&lt;br /&gt;
Now, that by itself isn&#039;t very exciting. But what if you had an array X of 1000 numbers. In C you&#039;d have to do something like&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;k == 0;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;for (i=1;i++;i&amp;lt;1001) {&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;k += X[i];&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You&#039;d do the same thing in APL with&lt;br /&gt;
: k {:=} +/ X&lt;br /&gt;
APL will take all of the entries in the array X and sum them, in one instruction. You don&#039;t even have to know how many entries are in the array X; APL will handle it for you.&lt;br /&gt;
&lt;br /&gt;
To be able to program in APL you&#039;ll have to learn what all of the operators do. Links to pages describing APL/APL2 symbols and what they do, just below:&lt;br /&gt;
* [[Operators]]&lt;br /&gt;
* [[Language_Features]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Examples]]&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Introduction_to_APL&amp;diff=3679</id>
		<title>Introduction to APL</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Introduction_to_APL&amp;diff=3679"/>
		<updated>2019-10-16T15:22:30Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: add cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Welcome to the wonderful world of APL. Whether you&#039;ve never done programming before or you&#039;re a journeyman programmer, APL is going to be something new to you. APL works like no other programming language. First, if you&#039;ve done any programming, you &amp;quot;know&amp;quot; that when you have an assignment or something like a piece of code is executed, it&#039;s &amp;quot;always&amp;quot; done right to left and mathematical formulas are always evaluated right to left according to precedence, so that exponentiation is done first, then multiplication and division, then addition and subtraction.  Well, APL is going to blow you away because &#039;&#039;everything you know is wrong&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
First, APL is &amp;quot;backwards&amp;quot; to what you know. APL operates from &#039;&#039;right to left&#039;&#039;. All other programming languages operate from left to right. When it comes to computing mathematical formulas, APL has no precedence; unless you put something in parenthesis, all mathematical computations are done strictly right to left to produce the result.&lt;br /&gt;
&lt;br /&gt;
Also, APL uses a specialized set of symbols, and before we had graphical systems, it even had its own specialized keyboard. Many of the actions you have to write a program in other languages can be done in one character in APL. While your typical programming language would show 3 times 4 as &#039;&#039;&#039;3*4&#039;&#039;&#039;, APL has a multiply symbol, so it is written as &#039;&#039;&#039;3{times}4&#039;&#039;&#039;, and to create one half or &#039;&#039;&#039;1/2&#039;&#039;&#039; in most languages, in APL you would enter &#039;&#039;&#039;1{divide}2&#039;&#039;&#039; .&lt;br /&gt;
&lt;br /&gt;
So, for example, if you have the following mathematical expression&lt;br /&gt;
: 4*5-10 (in normal programming languages), or in APL: 4 {times} 5 - 10&lt;br /&gt;
Your typical programming language would compute it as 4{times}5 which is (20), then 20 - 10, resulting in 10.  APL will compute it as 5-10 (-5) * 4, or -20. You can adjust this by placing arguments within parenthesis. If your expression was written as&lt;br /&gt;
: (4 {times} 5) - 10&lt;br /&gt;
It would produce the same answer no matter what programming language you use.&lt;br /&gt;
&lt;br /&gt;
Where APL shines is its ability to handle arrays as easily as most programs handle single values.  For example, the &#039;&#039;&#039;plus reduce&#039;&#039;&#039; operator is used to sum a list of numbers, so in a typical programming language like C or C++ you&#039;d have&lt;br /&gt;
: K == 5 + 6 + 8 + 9 + 12 +14&lt;br /&gt;
In APL, you&#039;d do the same thing with&lt;br /&gt;
: K {:=} +/5 6 8 9 12 14&lt;br /&gt;
Now, that by itself isn&#039;t very exciting. But what if you had an array X of 1000 numbers. In C you&#039;d have to do something like&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;k == 0;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;for (i=1;i++;i&amp;lt;1001) {&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;k += X[i];&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You&#039;d do the same thing in APL with&lt;br /&gt;
: k {:=} +/ X&lt;br /&gt;
APL will take all of the entries in the array X and sum them, in one instruction. You don&#039;t even have to know how many entries are in the array X; APL will handle it for you.&lt;br /&gt;
&lt;br /&gt;
To be able to program in APL you&#039;ll have to learn what all of the operators do. Links to pages describing APL/APL2 symbols and what they do, just below:&lt;br /&gt;
* [[Operators]]&lt;br /&gt;
* [[Language_Features]]&lt;br /&gt;
&lt;br /&gt;
[[Category:Examples]]&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=System_Variable_FPC&amp;diff=3670</id>
		<title>System Variable FPC</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=System_Variable_FPC&amp;diff=3670"/>
		<updated>2019-10-13T23:03:19Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;h1&amp;gt;&amp;lt;aplxx&amp;gt;⎕FPC&amp;lt;/aplxx&amp;gt; - Floating Point Control&amp;lt;/h1&amp;gt;&lt;br /&gt;
{{BoxStart|&amp;lt;apll&amp;gt;Z←⎕FPC&amp;lt;/apll&amp;gt;&lt;br /&gt;
|returns the current value of the Floating Point Control precision.}}&lt;br /&gt;
{{BoxEnd|&amp;lt;apll&amp;gt;Z&amp;lt;/apll&amp;gt; is an integer scalar that represents the current value of the number of bits of precision used for [[Rational and VFP Numbers|Multiple-Precision Floating Point numbers]].}}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; rules=&amp;quot;none&amp;quot; summary=&amp;quot;&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;apll&amp;gt;⎕FPC←R&amp;lt;/apll&amp;gt;&lt;br /&gt;
||sets the value of the Floating Point Control precision to &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;.&lt;br /&gt;
|-&lt;br /&gt;
||&amp;lt;apll&amp;gt;⎕FPC←⍬&amp;lt;/apll&amp;gt;&lt;br /&gt;
||sets the value of the Floating Point Control precision to its system default state.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
The approximate number of digits of precision for a given value of &amp;lt;apll&amp;gt;⎕FPC&amp;lt;/apll&amp;gt; is about &amp;lt;apll&amp;gt;10⍟2*⎕FPC&amp;lt;/apll&amp;gt;. The value of &amp;lt;apll&amp;gt;⎕FPC&amp;lt;/apll&amp;gt; for a given required precision is about &amp;lt;apll&amp;gt;⌈2⍟10*digits&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The minimum value for &amp;lt;apll&amp;gt;⎕FPC&amp;lt;/apll&amp;gt; is &amp;lt;apll&amp;gt;1&amp;lt;/apll&amp;gt;; the maximum value is the integer &amp;lt;apll&amp;gt;1073741695 ←→ ¯129+2*30 ←→ 16&amp;lt;_b/&amp;gt;3FFFFF7F&amp;lt;/apll&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The system default value is &amp;lt;apll&amp;gt;128&amp;lt;/apll&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For example:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;amp;ensp;&amp;amp;ensp;      ⎕PP←240 &lt;br /&gt;
&amp;amp;ensp;&amp;amp;ensp;      ⎕FPC←64   ⋄ *1&amp;lt;_x/&amp;gt;&lt;br /&gt;
&amp;amp;ensp;&amp;amp;ensp;2.7182818284590452354 &lt;br /&gt;
&amp;amp;ensp;&amp;amp;ensp;      ⎕FPC←128  ⋄ *1&amp;lt;_x/&amp;gt;&lt;br /&gt;
&amp;amp;ensp;&amp;amp;ensp;2.71828182845904523536028747135266249776 &lt;br /&gt;
&amp;amp;ensp;&amp;amp;ensp;      ⎕FPC←256  ⋄ *1&amp;lt;_x/&amp;gt;&lt;br /&gt;
&amp;amp;ensp;&amp;amp;ensp;2.71828182845904523536028747135266249775724709369995957496696762 &lt;br /&gt;
&amp;lt;_lc/&amp;gt;      772407663035355&lt;br /&gt;
&amp;amp;ensp;&amp;amp;ensp;      ⎕FPC←512  ⋄ *1&amp;lt;_x/&amp;gt;&lt;br /&gt;
&amp;amp;ensp;&amp;amp;ensp;2.71828182845904523536028747135266249775724709369995957496696762&lt;br /&gt;
&amp;lt;_lc/&amp;gt;      7724076630353547594571382178525166427427466391932003059921&lt;br /&gt;
&amp;lt;_lc/&amp;gt;      8174135966290435729003342952605956 &lt;br /&gt;
&amp;amp;ensp;&amp;amp;ensp;      ⎕FPC←1024 ⋄ *1&amp;lt;_x/&amp;gt;&lt;br /&gt;
&amp;amp;ensp;&amp;amp;ensp;2.71828182845904523536028747135266249775724709369995957496696762&lt;br /&gt;
&amp;lt;_lc/&amp;gt;      7724076630353547594571382178525166427427466391932003059921&lt;br /&gt;
&amp;lt;_lc/&amp;gt;      8174135966290435729003342952605956307381323286279434907632&lt;br /&gt;
&amp;lt;_lc/&amp;gt;      3382988075319525101901157383418793070215408914993488416750&lt;br /&gt;
&amp;lt;_lc/&amp;gt;      924&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Whereas, according to Wolfram Alpha, the exact value to 230 digits is&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&amp;amp;ensp;&amp;amp;ensp;2.71828182845904523536028747135266249775724709369995957496696762&lt;br /&gt;
&amp;lt;_lc/&amp;gt;      7724076630353547594571382178525166427427466391932003059921&lt;br /&gt;
&amp;lt;_lc/&amp;gt;      8174135966290435729003342952605956307381323286279434907632&lt;br /&gt;
&amp;lt;_lc/&amp;gt;      3382988075319525101901157383418793070215408914993488...&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;See Also: [[System_Variable_CT|Comparison Tolerance ⎕CT]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{System Variables}}&lt;br /&gt;
{{Article footer|0|NO}}&lt;br /&gt;
[[Category:System functions|FPC]] [[Category:Math functions|FPC]]&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Rho&amp;diff=3669</id>
		<title>Rho</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Rho&amp;diff=3669"/>
		<updated>2019-10-13T23:00:04Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: t/c&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
&lt;br /&gt;
{{Article header&lt;br /&gt;
|sym={rho}&lt;br /&gt;
|def=Shape or Reshape&lt;br /&gt;
|ks=ALT+r&lt;br /&gt;
|char=9076 or x2374&lt;br /&gt;
|kb=APLKB-Rho.png|kb2=}}&lt;br /&gt;
&lt;br /&gt;
Note: This is ALT+r; ALT+SHIFT+R will generate the symbol [[Symbol Root|root]] ({root}).&lt;br /&gt;
&lt;br /&gt;
Rho may be used as a [[monadic]] or [[dyadic]] operator, depending on the functionality desired. Used monadically with the argument to the right returns the &#039;&#039;&#039;shape&#039;&#039;&#039; of the argument. Used dyadically, the argument on the left is used to &#039;&#039;&#039;reshape&#039;&#039;&#039; the argument on the right.&lt;br /&gt;
&lt;br /&gt;
==Shape - Monadic {rho}==&lt;br /&gt;
&amp;lt;big&amp;gt;Symbol &#039;&#039;&#039;{rho}&#039;&#039;&#039; when used &#039;&#039;&#039;monadically&#039;&#039;&#039; (no left argument) returns the &#039;&#039;&#039;shape of {rho}&#039;s right argument&#039;&#039;&#039;, i.e. the size or dimensions of a scalar, string, vector, array or matrix. Shape returns null for a scalar or a single character, it returns 0 for a null string, the length of a string of at least two characters, the number of elements of an array or vector, and the number of elements of a matrix.&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      ⍴ 1 2 3 4 5 6    ⍝ Rho in the case of vectors represents a Count(# elements) function&lt;br /&gt;
6&lt;br /&gt;
      ⍴&#039;abcdefg&#039;       ⍝ Similarly with text strings(vector of chars), Rho represents a Count function&lt;br /&gt;
7&lt;br /&gt;
      ⍴ 1              ⍝ For a scalar right argument, Rho generates a null vector.&lt;br /&gt;
&lt;br /&gt;
      ⍴⍴ 1             ⍝ The shape of the shape(⍴⍴) of a scalar (because the shape of a scalar is a null) - generates zero.&lt;br /&gt;
0&lt;br /&gt;
      ⍴ &#039;a&#039;            ⍝ Ditto for {numbers, integers, letters}, etc. - for scalar right arguments: Rho also generates a null vector.&lt;br /&gt;
&lt;br /&gt;
      ⍴⍴ &#039;a&#039;&lt;br /&gt;
0&lt;br /&gt;
      ⍴, 4.581        ⍝ Rho for a raveled(, or comma used) scalar(real num 4.581) - again correctly represents a Count(# elements) function&lt;br /&gt;
1&lt;br /&gt;
&lt;br /&gt;
      2 3⍴⍳6           ⍝ Dyadic call for demonstration purposes(see below for dyadic calls to {rho}): result = 2 rows and 3 cols matrix of integers(1..6)&lt;br /&gt;
1 2 3&lt;br /&gt;
4 5 6&lt;br /&gt;
&lt;br /&gt;
      ⍴2 3⍴⍳6         ⍝ Monadic LEFTMOST shape {rho} yields: matrix has 2 rows and 3 cols; equivalent to ⍴(2 3⍴⍳6) which has parentheses added for clarity&lt;br /&gt;
2 3&lt;br /&gt;
&lt;br /&gt;
      ⍴⍴(2 3⍴⍳6)      ⍝ Monadic LEFTMOST shape-shape or {rho}{rho} generates the RANK of the 2 row, 3 col matrix which = 2 (matrix) &lt;br /&gt;
2&lt;br /&gt;
      ⍴⍴(⍳6)         ⍝ Monadic leftmost {rho}{rho} generates the RANK of the vector = 1 (vector)&lt;br /&gt;
1&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Reshape - Dyadic {rho}==&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;{rho}&#039;&#039;&#039;&#039;s Left Argument(L) output-reshapes {rho}&#039;s Right Argument(R).&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; rules=&amp;quot;none&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
    &amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;apll&amp;gt;Z←L⍴R&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;dyadic &#039;&#039;&#039;{rho}&#039;&#039;&#039; returns an array of shape &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; whose items are taken from &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; in row major order, repeated as necessary.&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; is a scalar or vector of non-negative integers, and &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; is an arbitrary array.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;If the right argument is empty, the result consists of &amp;lt;apll&amp;gt;×/⍴L&amp;lt;/apll&amp;gt; copies of the fill item of &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;For example, in origin &amp;lt;apll&amp;gt;1&amp;lt;/apll&amp;gt; (where &amp;lt;apll&amp;gt;⎕IO=1&amp;lt;/apll&amp;gt;)&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      2 3⍴⍳6&lt;br /&gt;
 1 2 3&lt;br /&gt;
 4 5 6&lt;br /&gt;
      2 3⍴⍳0&lt;br /&gt;
 0 0 0&lt;br /&gt;
 0 0 0&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The idea for the latter enhancement was taken from Dyalog APL.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{article footer|8|Rho}}&lt;br /&gt;
[[Category:Monadic operators]]&lt;br /&gt;
[[Category:Dyadic operators]]&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Datatypes_and_Storage&amp;diff=3668</id>
		<title>Datatypes and Storage</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Datatypes_and_Storage&amp;diff=3668"/>
		<updated>2019-10-13T22:55:40Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: /* Type Demotion */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Datatypes==&lt;br /&gt;
&lt;br /&gt;
===Immediate Data===&lt;br /&gt;
&lt;br /&gt;
If data meets specific criteria, it is stored in the Symbol Table instead of global memory.  That is if it is a simple (Character, Boolean, Integer, Floating Point) scalar, it is represented in the Symbol Table as follows according to these structures which may be found in &#039;&#039;&#039;symtab.h&#039;&#039;&#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
// Symbol table flags&lt;br /&gt;
typedef struct tagSTFLAGS&lt;br /&gt;
{&lt;br /&gt;
    UINT Imm:1,             // 00000001:  The data in .stData is Immediate simple numeric or character scalar&lt;br /&gt;
         ImmType:5,         // 0000003E:  ...                    Immediate Boolean, Integer, Character, or Float (see IMM_TYPES)&lt;br /&gt;
         Inuse:1,           // 00000040:  Inuse entry&lt;br /&gt;
         Value:1,           // 00000080:  Entry has a value&lt;br /&gt;
         ObjName:3,         // 00000700:  The data in .stData is NULL if .stNameType is NAMETYPE_UNK; value, address, or HGLOBAL otherwise&lt;br /&gt;
                            //            (see OBJ_NAMES)&lt;br /&gt;
         stNameType:4,      // 00007800:  The data in .stdata is value (if .Imm), address (if .FcnDir), or HGLOBAL (otherwise)&lt;br /&gt;
                            //            (see NAME_TYPES)&lt;br /&gt;
         SysVarValid:5,     // 000F8000:  Index to validation routine for System Vars (see SYS_VARS)&lt;br /&gt;
         UsrDfn:1,          // 00100000:  User-defined function/operator/hyperator&lt;br /&gt;
         DfnLabel:1,        // 00200000:  User-defined function/operator/hyperator label        (valid only if .Value is set)&lt;br /&gt;
         DfnSysLabel:1,     // 00400000:  User-defined function/operator/hyperator system label (valid only if .Value is set)&lt;br /&gt;
         DfnAxis:1,         // 00800000:  User-defined function/operator/hyperator accepts axis value&lt;br /&gt;
         FcnDir:1,          // 01000000:  Direct function/operator/hyperator               (stNameFcn is valid)&lt;br /&gt;
         StdSysName:1,      // 02000000:  Is a standard System Name&lt;br /&gt;
         bIsAlpha:1,        // 04000000:  Is Alpha&lt;br /&gt;
         bIsOmega:1,        // 08000000:  Is Omega&lt;br /&gt;
         :4;                // F0000000:  Available bits&lt;br /&gt;
} STFLAGS, *LPSTFLAGS;&lt;br /&gt;
&lt;br /&gt;
// N.B.:  Whenever changing the above struct (STFLAGS),&lt;br /&gt;
//   be sure to make a corresponding change to&lt;br /&gt;
//   &amp;lt;astFlagNames&amp;gt; in &amp;lt;dispdbg.c&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
// .Inuse and .PrinHash are valid for all entries.&lt;br /&gt;
// .Inuse   = 0 implies that all but .PrinHash are zero.&lt;br /&gt;
// .Imm     implies one and only one of the IMMTYPE_***s&lt;br /&gt;
// .Imm     = 1 implies that one and only one of aplBoolean, aplInteger, aplChar, or aplFloat is valid.&lt;br /&gt;
// .Imm     = 0 implies that stGlbData is valid.&lt;br /&gt;
// .Value   is valid for NAMETYPE_VAR only, however .stNameType EQ NAMETYPE_VAR&lt;br /&gt;
//          should never be without a value.&lt;br /&gt;
// .UsrDfn  is set when the function is user-defined.&lt;br /&gt;
// .FcnDir  may be set for any function/operator/hyperator; it is a&lt;br /&gt;
//          direct pointer to the code.&lt;br /&gt;
// htGlbName in HSHENTRY is set when .Imm and .FcnDir are clear.&lt;br /&gt;
&lt;br /&gt;
// Immediate data or a handle to global data&lt;br /&gt;
typedef union tagSYMTAB_DATA&lt;br /&gt;
{&lt;br /&gt;
    APLBOOL    stBoolean;       // 00:  A number (Boolean)&lt;br /&gt;
    APLINT     stInteger;       // 00:  A number (Integer)&lt;br /&gt;
    APLFLOAT   stFloat;         // 00:  A floating point number&lt;br /&gt;
    APLCHAR    stChar;          // 00:  A character&lt;br /&gt;
    HGLOBAL    stGlbData;       // 00:  Handle of the entry&#039;s data&lt;br /&gt;
    LPVOID     stVoid;          // 00:  An abritrary ptr&lt;br /&gt;
    LPPRIMFNS  stNameFcn;       // 00:  Ptr to a named function&lt;br /&gt;
    APLLONGEST stLongest;       // 00:  Longest datatype (so we can copy the entire data)&lt;br /&gt;
                                // 08:  Length&lt;br /&gt;
} SYMTAB_DATA, *LPSYMTAB_DATA;&lt;br /&gt;
&lt;br /&gt;
#define SYM_HEADER_SIGNATURE    &#039;EMYS&#039;&lt;br /&gt;
&lt;br /&gt;
// Symbol table entry&lt;br /&gt;
typedef struct tagSYMENTRY&lt;br /&gt;
{&lt;br /&gt;
    STFLAGS     stFlags;        // 00:  Flags&lt;br /&gt;
    SYMTAB_DATA stData;         // 04:  For immediates, the data value;&lt;br /&gt;
                                //        for others, the HGLOBAL (8 bytes)&lt;br /&gt;
    LPHSHENTRY  stHshEntry;     // 0C:  Ptr to the matching HSHENTRY&lt;br /&gt;
    struct tagSYMENTRY&lt;br /&gt;
               *stPrvEntry,     // 10:  Ptr to previous (shadowed) STE (NULL = none)&lt;br /&gt;
               *stSymLink;      // 14:  Ptr to next entry in linked list of&lt;br /&gt;
                                //        similarly grouped entries (NULL = none)&lt;br /&gt;
    UINT        stSILevel;      // 18:  State Indicator Level for this STE&lt;br /&gt;
    HEADER_SIGNATURE Sig;       // 1C:  STE header signature&lt;br /&gt;
                                // 20:  Length&lt;br /&gt;
} SYMENTRY, *LPSYMENTRY;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Global Data===&lt;br /&gt;
&lt;br /&gt;
Each global datatype type is stored in a global variable allocated by &#039;&#039;&#039;MyGlobalAlloc (GPTR | GHND, # Bytes)&#039;&#039;&#039; which returns a global memory handle (or &#039;&#039;&#039;NULL&#039;&#039;&#039; if an error occurs).  The # Bytes is calculated by the function &#039;&#039;&#039;CalcArraySize (ARRAY_TYPE, APLNELM, APLRANK)&#039;&#039;&#039;.  The ARRAY_TYPE enum is defined in &#039;&#039;&#039;datatype.h&#039;&#039;&#039; as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;// Array types -- used to identify array storage type in memory&lt;br /&gt;
typedef enum tagARRAY_TYPES&lt;br /&gt;
{&lt;br /&gt;
 ARRAY_BOOL = 0 ,                       // 00:  Boolean&lt;br /&gt;
 ARRAY_INT      ,                       // 01:  Integer&lt;br /&gt;
 ARRAY_FLOAT    ,                       // 02:  Floating point&lt;br /&gt;
 ARRAY_CHAR     ,                       // 03:  Character&lt;br /&gt;
 ARRAY_HETERO   ,                       // 04:  Simple heterogeneous (mixed numeric and character scalars)&lt;br /&gt;
 ARRAY_NESTED   ,                       // 05:  Nested&lt;br /&gt;
 ARRAY_LIST     ,                       // 06:  List&lt;br /&gt;
 ARRAY_APA      ,                       // 07:  Arithmetic Progression Array&lt;br /&gt;
 ARRAY_RAT      ,                       // 08:  Multiprecision Rational Number&lt;br /&gt;
 ARRAY_VFP      ,                       // 09:  Variable-precision Float&lt;br /&gt;
 ARRAY_HC2I     ,                       // 0A:  Complex    INT coefficients&lt;br /&gt;
 ARRAY_HC2F     ,                       // 0B:  ...        FLT ...&lt;br /&gt;
 ARRAY_HC2R     ,                       // 0C:  ...        RAT ...&lt;br /&gt;
 ARRAY_HC2V     ,                       // 0D:  ...        VFP ...&lt;br /&gt;
 ARRAY_HC4I     ,                       // 0E:  Quaternion INT coefficients&lt;br /&gt;
 ARRAY_HC4F     ,                       // 0F:  ...        FLT ...&lt;br /&gt;
 ARRAY_HC4R     ,                       // 10:  ...        RAT ...&lt;br /&gt;
 ARRAY_HC4V     ,                       // 11:  ...        VFP ...&lt;br /&gt;
 ARRAY_HC8I     ,                       // 12:  Octonion   INT coefficients&lt;br /&gt;
 ARRAY_HC8F     ,                       // 13:  ...        FLT ...&lt;br /&gt;
 ARRAY_HC8R     ,                       // 14:  ...        RAT ...&lt;br /&gt;
 ARRAY_HC8V     ,                       // 15:  ...        VFP ...&lt;br /&gt;
&lt;br /&gt;
 ARRAY_LENGTH   ,                       // 16:  # elements in this enum&lt;br /&gt;
                                        //      *MUST* be the last non-error entry&lt;br /&gt;
                                        // 17-1F:  Available entries (5 bits)&lt;br /&gt;
 ARRAY_INIT     = ARRAY_LENGTH  ,&lt;br /&gt;
 ARRAY_ERROR    = (APLSTYPE) -1 ,&lt;br /&gt;
 ARRAY_NONCE    = (APLSTYPE) -2 ,&lt;br /&gt;
 ARRAY_REALONLY = (APLSTYPE) -3 ,&lt;br /&gt;
&lt;br /&gt;
 ARRAY_HC1I  =   ARRAY_INT   ,          // To simplify common macros&lt;br /&gt;
 ARRAY_HC1F  =   ARRAY_FLOAT ,          // ...&lt;br /&gt;
 ARRAY_HC1R  =   ARRAY_RAT   ,          // ...&lt;br /&gt;
 ARRAY_HC1V  =   ARRAY_VFP   ,          // ...&lt;br /&gt;
} ARRAY_TYPES;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;APLNELM&#039;&#039;&#039; typedef is defined in &#039;&#039;&#039;types.h&#039;&#039;&#039; as follows (where &#039;&#039;&#039;ULONGLONG&#039;&#039;&#039; is defined as an unsigned 64-bit integer):&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef ULONGLONG   APLNELM;            // The type of the # elements in an array&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;APLRANK&#039;&#039;&#039; typedef is defined in &#039;&#039;&#039;types.h&#039;&#039;&#039; as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
typedef ULONGLONG   APLRANK;            // The type of the rank element in an array&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Headers===&lt;br /&gt;
&lt;br /&gt;
Each global array is preceded in memory by a &#039;&#039;&#039;header&#039;&#039;&#039; and is defined in &#039;&#039;&#039;datatype.h&#039;&#039;&#039; as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;typedef struct tagHEADER_SIGNATURE&lt;br /&gt;
{&lt;br /&gt;
    UINT             nature;            // 00:  Array header signature (common to all types of arrays)&lt;br /&gt;
                                        // 04:  Length&lt;br /&gt;
} HEADER_SIGNATURE, *LPHEADER_SIGNATURE;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
// Variable array header&lt;br /&gt;
#define VARARRAY_HEADER_SIGNATURE   &#039;SRAV&#039;&lt;br /&gt;
&lt;br /&gt;
typedef struct tagVARARRAY_HEADER&lt;br /&gt;
{&lt;br /&gt;
    HEADER_SIGNATURE Sig;               // 00:  Array header signature&lt;br /&gt;
    UINT             ArrType:5,         // 04:  0000001F:  The type of the array (see ARRAY_TYPES)&lt;br /&gt;
                     PermNdx:5,         //      000003E0:  Permanent array index (e.g., PERMNDX_ZILDE for {zilde})&lt;br /&gt;
                     SysVar:1,          //      00000400:  Izit for a Sysvar (***DEBUG*** only)?&lt;br /&gt;
                     PV0:1,             //      00000800:  Permutation Vector in origin-0&lt;br /&gt;
                     PV1:1,             //      00001000:  ...                          1&lt;br /&gt;
                     bSelSpec:1,        //      00002000:  Select Specification array&lt;br /&gt;
                     All2s:1,           //      00004000:  Values are all 2s&lt;br /&gt;
#ifdef DEBUG&lt;br /&gt;
                     bMFOvar:1,         //      00008000:  Magic Function/Operator/Hyperator var -- do not display&lt;br /&gt;
                     :16;               //      FFFF0000:  Available bits&lt;br /&gt;
#else&lt;br /&gt;
                     :17;               //      FFFF8000:  Available bits&lt;br /&gt;
#endif&lt;br /&gt;
    UINT             RefCnt;            // 08:  Reference count&lt;br /&gt;
    APLNELM          NELM;              // 0C:  # elements in the array (8 bytes)&lt;br /&gt;
    APLRANK          Rank;              // 14:  The rank of the array (8 bytes)&lt;br /&gt;
                                        //      followed by the dimensions&lt;br /&gt;
                                        // 1C:  Length&lt;br /&gt;
} VARARRAY_HEADER, *LPVARARRAY_HEADER;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Characters===&lt;br /&gt;
&lt;br /&gt;
There is only one character type (&#039;&#039;&#039;ARRAY_CHAR&#039;&#039;&#039;) and is stored as 16-bit WORDs in UCS-2 format.  This format is a subset of UTF-16LE in that it does not attempt to handle characters beyond the BMP (Basic Multilingual Plane), that is 16 bits.&lt;br /&gt;
&lt;br /&gt;
===Numbers===&lt;br /&gt;
&lt;br /&gt;
There are numerous numeric datatypes from Boolean to Octonions.  All of the numeric datatypes in this section use the common header above.  The data portion of the array immediately follows the header.&lt;br /&gt;
&lt;br /&gt;
Booleans are stored in the usual one element per bit in Little-Endian format.&lt;br /&gt;
&lt;br /&gt;
The rest of the numeric datatypes in this section can be described by the &amp;quot;outer product&amp;quot; of its dimension (1, 2, 4, 8) and its Basic Type (8-byte Integer, 8-byte Floating Point, &#039;&#039;&#039;__mpq_struct&#039;&#039;&#039; (24- or 32-byte) Multiple-precision Integer/Rational, and &#039;&#039;&#039;__mpfr_struct&#039;&#039;&#039; (32- or 40-byte) Multiple-precision Floating Point).  Because a Multiple-precision number contains a pointer to its data, its byte count depends upon the size of a pointer (32- or 64-bit).  The dimensions (1, 2, 4, 8) correspond to the Real, Complex, Quaternion, and Octonion numbers.  A scalar number in a specific dimension has as many coefficients (the Basic Types) as the dimension.  The Multiple-precision types &#039;&#039;&#039;__mpq_struct&#039;&#039;&#039; and &#039;&#039;&#039;__mpfr_struct&#039;&#039;&#039; are defined in &#039;&#039;&#039;mpir.h&#039;&#039;&#039; and &#039;&#039;&#039;mpfr.h&#039;&#039;&#039;, respectively.  The struct for &#039;&#039;&#039;__mpq_struct&#039;&#039;&#039; is defined as two &#039;&#039;&#039;__mpz_struct&#039;&#039;&#039;s, one for the numerator and one for the denominator where &#039;&#039;&#039;__mpz_struct&#039;&#039;&#039; represents a Multiple-precision Integer and is defined in &#039;&#039;&#039;mpir.h&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
For example, the data portion of&lt;br /&gt;
* A Real Integer array has one 64-bit integer for each element.&lt;br /&gt;
* A Complex Multiple-precision Integer/Rational array has two &#039;&#039;&#039;__mpq_struct&#039;&#039;&#039; Basic Types per element.&lt;br /&gt;
* A Quaternion Multiple-precision Floating Point array has four &#039;&#039;&#039;__mpfr_struct&#039;&#039;&#039; Basic Types per element.&lt;br /&gt;
&lt;br /&gt;
===Nested Arrays===&lt;br /&gt;
&lt;br /&gt;
Nested Arrays (&#039;&#039;&#039;ARRAY_NESTED&#039;&#039;&#039;) use the common header as above.  The data portion of a Nested Array consists of a series of pointers (either 32- or 64-bit depending upon the width of the ABI (Application Binary Interface) of the program as 32- or 64-bit).  As each pointer is on at least a 32-bit boundary, the low-order bit (normally 0) is used to distinguish STEs (Symbol Table Entries) from Global pointers.  In an STE pointer the low-order bit is 0 and in Global pointers it is 1.  A STE pointer is then an index into the current Symbol Table and a Global pointer (with the low-order bit cleared) is a global memory handle which may be locked and unlocked using &#039;&#039;&#039;MyGlobalLock&#039;&#039;&#039; and &#039;&#039;&#039;MyGlobalUnlock&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
===Heterogeneous Arrays===&lt;br /&gt;
&lt;br /&gt;
Heterogeneous arrays (&#039;&#039;&#039;ARRAY_HETERO&#039;&#039;&#039;) are a subset of Nested Arrays in that the pointers are all to Symbol Table Entries, that is the low-order bit in the pointer is 0.&lt;br /&gt;
&lt;br /&gt;
===Arithmetic Progression Arrays===&lt;br /&gt;
&lt;br /&gt;
APAs (&#039;&#039;&#039;ARRAY_APA&#039;&#039;&#039;) are a superset of APVs (Arithmetic Progression Vectors) in that they may be of any Shape and Rank.  The header portion is as above.  The data portion is defined in &#039;&#039;&#039;datatype.h&#039;&#039;&#039; as follows:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;// Define APA structure&lt;br /&gt;
typedef struct tagAPLAPA                // Offset + Multiplier {times} {iota} NELM (origin-0)&lt;br /&gt;
{&lt;br /&gt;
    APLINT  Off,                        // 00:  Offset&lt;br /&gt;
            Mul;                        // 08:  Multiplier&lt;br /&gt;
                                        // 10:  Length&lt;br /&gt;
} APLAPA, * LPAPLAPA;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Multiplier may be 0 as, for example, is produced by the Reshape function of a simple scalar integer.&lt;br /&gt;
&lt;br /&gt;
==Type Demotion==&lt;br /&gt;
&lt;br /&gt;
All arrays are subject to type Demotion where a pointer to a &#039;&#039;&#039;token&#039;&#039;&#039; containing the array is passed to the &#039;&#039;&#039;TypeDemote (LPTOKEN, UBOOL)&#039;&#039;&#039; function and the Token is then changed.  Tokens are defined in &#039;&#039;&#039;tokens.h&#039;&#039;&#039;.  The &#039;&#039;&#039;UBOOL&#039;&#039;&#039; parameter specifies whether or not the dimension (1, 2, 4, 8) of the array may demoted (only if the appropriate imaginary parts are zero).  This value is &#039;&#039;&#039;FALSE&#039;&#039;&#039; except in very special circumstances.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:NARS 2000]]&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Control_Structures&amp;diff=3667</id>
		<title>Control Structures</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Control_Structures&amp;diff=3667"/>
		<updated>2019-10-13T22:53:51Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: t/c&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; rules=&amp;quot;none&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
    &amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:for &amp;lt;i&amp;gt;varname&amp;lt;/i&amp;gt; :in &amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt; ⋄ &amp;lt;/apll&amp;gt;...&amp;lt;apll&amp;gt; ⋄ :endfor&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;Loop through the elements of &amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt; assigning each value to &amp;lt;i&amp;gt;varname&amp;lt;/i&amp;gt;, and then execute the statements between &amp;lt;apll&amp;gt;:for&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;:endfor&amp;lt;/apll&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:forlcl &amp;lt;i&amp;gt;varname&amp;lt;/i&amp;gt; :in &amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt; ⋄ &amp;lt;/apll&amp;gt;...&amp;lt;apll&amp;gt; ⋄ :endforlcl&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;Same as &amp;lt;apll&amp;gt;:for&amp;lt;/apll&amp;gt; except that the &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;varname&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt; is localized to the &amp;lt;apll&amp;gt;:forlcl&amp;lt;/apll&amp;gt; / &amp;lt;apll&amp;gt;:endforlcl&amp;lt;/apll&amp;gt; control structure.&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:goto &amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;Execute &amp;lt;apll&amp;gt;{goto}&amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:if &amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt; ⋄ &amp;lt;/apll&amp;gt;...&amp;lt;apll&amp;gt; ⋄ :endif&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;Execute the statements between &amp;lt;apll&amp;gt;:if&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;:endif&amp;lt;/apll&amp;gt; iff &amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt; is &amp;lt;apll&amp;gt;1&amp;lt;/apll&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:repeat ⋄ &amp;lt;/apll&amp;gt;...&amp;lt;apll&amp;gt; ⋄ :endrepeat&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;Repeatedly execute the statements between &amp;lt;apll&amp;gt;:repeat&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;:endrepeat&amp;lt;/apll&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:repeat ⋄ &amp;lt;/apll&amp;gt;...&amp;lt;apll&amp;gt; ⋄ :until &amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;Repeatedly execute the statements between &amp;lt;apll&amp;gt;:repeat&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;:until&amp;lt;/apll&amp;gt; until &amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt; is &amp;lt;apll&amp;gt;0&amp;lt;/apll&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:return&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;Execute &amp;lt;apll&amp;gt;{goto}0&amp;lt;/apll&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:select &amp;lt;i&amp;gt;expr1&amp;lt;/i&amp;gt; ⋄ :case &amp;lt;i&amp;gt;expr2&amp;lt;/i&amp;gt; ⋄ &amp;lt;/apll&amp;gt;...&amp;lt;apll&amp;gt; &amp;lt;/apll&amp;gt;&amp;lt;br/&amp;gt; &amp;lt;apll&amp;gt; ⋄ :caselist &amp;lt;i&amp;gt;expr3&amp;lt;/i&amp;gt; ⋄ &amp;lt;/apll&amp;gt;...&amp;lt;apll&amp;gt; ⋄ :endselect&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;Execute a specific block of statements depending upon which &amp;lt;apll&amp;gt;:case&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;:caselist&amp;lt;/apll&amp;gt; expression matches &amp;lt;i&amp;gt;expr1&amp;lt;/i&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:switch &amp;lt;i&amp;gt;expr1&amp;lt;/i&amp;gt; ⋄ :case &amp;lt;i&amp;gt;expr2&amp;lt;/i&amp;gt; ⋄ &amp;lt;/apll&amp;gt;...&amp;lt;apll&amp;gt; &amp;lt;/apll&amp;gt;&amp;lt;br/&amp;gt; &amp;lt;apll&amp;gt; ⋄ :caselist &amp;lt;i&amp;gt;expr3&amp;lt;/i&amp;gt; ⋄ &amp;lt;/apll&amp;gt;...&amp;lt;apll&amp;gt; ⋄ :endswitch&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;Same as &amp;lt;apll&amp;gt;:select&amp;lt;/apll&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:while &amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt; ⋄ &amp;lt;/apll&amp;gt;...&amp;lt;apll&amp;gt; ⋄ :endwhile&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;Repeatedly execute the statements between &amp;lt;apll&amp;gt;:while&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;:endwhile&amp;lt;/apll&amp;gt; while &amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt; is &amp;lt;apll&amp;gt;1&amp;lt;/apll&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:while &amp;lt;i&amp;gt;expr1&amp;lt;/i&amp;gt; ⋄ &amp;lt;/apll&amp;gt;...&amp;lt;apll&amp;gt; ⋄ :until &amp;lt;i&amp;gt;expr2&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;Repeatedly execute the statements between &amp;lt;apll&amp;gt;:while&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;:until&amp;lt;/apll&amp;gt; while &amp;lt;i&amp;gt;expr1&amp;lt;/i&amp;gt; is &amp;lt;apll&amp;gt;1&amp;lt;/apll&amp;gt; and &amp;lt;i&amp;gt;expr2&amp;lt;/i&amp;gt; is &amp;lt;apll&amp;gt;0&amp;lt;/apll&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;All Control Structures may be placed all or partly on one line as in &amp;lt;apll&amp;gt;:for I :in {iota}12 ⋄ &amp;lt;/apll&amp;gt;...&amp;lt;apll&amp;gt; ⋄ :endfor&amp;lt;/apll&amp;gt; (very convenient for use in immediate execution mode), or on multiple lines as in&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;:for I :in {iota}12&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
...&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;:endfor&amp;lt;/apll&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;As usual for any statement, a label may be used at the beginning of any line even if it starts with a Control Structure.  For example,&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;[3]   L1::if I &amp;amp;lt; 10 ⋄ &amp;lt;/apll&amp;gt;...&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Each Control Structure that closes with a statement-specific keyword (&amp;lt;apll&amp;gt;:endfor&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;:endforlcl&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;:endif&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;:endrepeat&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;:endselect&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;:endswitch&amp;lt;/apll&amp;gt;, and &amp;lt;apll&amp;gt;:endwhile&amp;lt;/apll&amp;gt;), may instead close with the &amp;lt;apll&amp;gt;:end&amp;lt;/apll&amp;gt; keyword.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FOR/FORLCL Statements ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; rules=&amp;quot;none&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:for &amp;lt;i&amp;gt;varname&amp;lt;/i&amp;gt; :in &amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td style=&amp;quot;border-right: solid 1px black;&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:forlcl &amp;lt;i&amp;gt;varname&amp;lt;/i&amp;gt; :in &amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;... (Block of statements)&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td style=&amp;quot;border-right: solid 1px black;&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;... (Block of statements)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:endfor&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td style=&amp;quot;border-right: solid 1px black;&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:endforlcl&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These statements evaluate &amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt; once, loop through its elements, assign each successive value to &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;varname&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;, and then execute the block of statements once for each value in &amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt;.  The &amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt; may be of any type (including character and nested), any rank, and any shape.  If &amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt; is empty, the block of statements is skipped.&lt;br /&gt;
&lt;br /&gt;
With the &amp;lt;apll&amp;gt;:for&amp;lt;/apll&amp;gt; statement, the &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;varname&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt; is not localized to the &amp;lt;apll&amp;gt;:for&amp;lt;/apll&amp;gt; loop; upon exiting the loop, &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;varname&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt; has the last value assigned to it by the &amp;lt;apll&amp;gt;:for&amp;lt;/apll&amp;gt; loop.&lt;br /&gt;
&lt;br /&gt;
With the &amp;lt;apll&amp;gt;:forlcl&amp;lt;/apll&amp;gt; statement, the &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;varname&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt; is localized to the &amp;lt;apll&amp;gt;:forlcl&amp;lt;/apll&amp;gt; loop; upon exiting the loop, &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;varname&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt; has the value assigned to it before the &amp;lt;apll&amp;gt;:forlcl&amp;lt;/apll&amp;gt; loop started.&lt;br /&gt;
&lt;br /&gt;
To interrupt the flow of control within a block of statements, use the &amp;lt;apll&amp;gt;:continue&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;:leave&amp;lt;/apll&amp;gt; keywords.  The former keyword transfers control to the end of the block continuing with the next iteration, thus skipping the statements between the &amp;lt;apll&amp;gt;:continue&amp;lt;/apll&amp;gt; and matching &amp;lt;apll&amp;gt;:endfor&amp;lt;/apll&amp;gt;/&amp;lt;apll&amp;gt;:endforlcl&amp;lt;/apll&amp;gt; keywords.  The latter keyword exits the &amp;lt;apll&amp;gt;:for&amp;lt;/apll&amp;gt;/&amp;lt;apll&amp;gt;:forlcl&amp;lt;/apll&amp;gt; loop entirely and transfers control to the statement after the matching &amp;lt;apll&amp;gt;:endfor&amp;lt;/apll&amp;gt;/&amp;lt;apll&amp;gt;:endforlcl&amp;lt;/apll&amp;gt; statement.  Typically, these two keywords appear within &amp;lt;apll&amp;gt;:if&amp;lt;/apll&amp;gt;/&amp;lt;apll&amp;gt;:endif&amp;lt;/apll&amp;gt; statements.&lt;br /&gt;
&lt;br /&gt;
== GOTO Statement ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;:goto &amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This statement transfers control to the line number specified in &amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt;.  The value of &amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt; must be a numeric simple scalar or one-element vector.  This statement is equivalent to &amp;lt;tt&amp;gt;[[→]]&amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt;&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== IF Statement ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;:if &amp;lt;i&amp;gt;expr1&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
... (Block of statements)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;:elseif &amp;lt;i&amp;gt;expr2&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
... (Block of statements)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;:else&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
... (Block of statements)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;:endif&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This statement conditionally executes a block of statements.&lt;br /&gt;
&lt;br /&gt;
Each expression must evaluate to a Boolean-valued scalar or one-element vector.&lt;br /&gt;
&lt;br /&gt;
Each &amp;lt;apll&amp;gt;:if&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;:elseif&amp;lt;/apll&amp;gt; statement may be followed by zero or more statements which form the block of statements controlled by that statement.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;apll&amp;gt;:if&amp;lt;/apll&amp;gt; statement may be followed by zero or more &amp;lt;apll&amp;gt;:elseif&amp;lt;/apll&amp;gt; blocks.  Optionally, the &amp;lt;apll&amp;gt;:else&amp;lt;/apll&amp;gt; statement may appear after all &amp;lt;apll&amp;gt;:elseif&amp;lt;/apll&amp;gt; statements to handle the case where none of the previous expressions was true (evaluated to a &amp;lt;apll&amp;gt;1&amp;lt;/apll&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Each &amp;lt;apll&amp;gt;:if&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;:elseif&amp;lt;/apll&amp;gt; statement may be followed by zero or more &amp;lt;apll&amp;gt;:andif&amp;lt;/apll&amp;gt; statements to narrow the conditions under which the following block of statements is executed, or may be followed by zero or more &amp;lt;apll&amp;gt;:orif&amp;lt;/apll&amp;gt; statements to widen the conditions under which the following block of statements is executed.  The &amp;lt;apll&amp;gt;:andif&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;:orif&amp;lt;/apll&amp;gt; statements may not be mixed within any &amp;lt;apll&amp;gt;:if&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;:elseif&amp;lt;/apll&amp;gt; statement.&lt;br /&gt;
&lt;br /&gt;
== REPEAT Statement ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; rules=&amp;quot;none&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:repeat&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td style=&amp;quot;border-right: solid 1px black;&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:repeat&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;... (Block of statements)&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td style=&amp;quot;border-right: solid 1px black;&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;... (Block of statements)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:endrepeat&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td style=&amp;quot;border-right: solid 1px black;&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:until &amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This statement executes a block of statements repeatedly (but at least once) until the &amp;lt;apll&amp;gt;:until&amp;lt;/apll&amp;gt; expression is true, or control transfers out of the Control Structure.&lt;br /&gt;
&lt;br /&gt;
In the righthand form above, the block of statements is executed and then the expression is executed.  It must evaluate to a Boolean-valued scalar or one-element vector.  If the expression is true, the Control Structure terminates and execution continues with the statement after the &amp;lt;apll&amp;gt;:until&amp;lt;/apll&amp;gt; statement; if the expression is false, execution continues at the start of the Control Structure.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;apll&amp;gt;:until&amp;lt;/apll&amp;gt; statement may be followed by zero or more &amp;lt;apll&amp;gt;:andif&amp;lt;/apll&amp;gt; statements to widen the conditions under which the block of statements is executed, or it may be followed by zero or more &amp;lt;apll&amp;gt;:orif&amp;lt;/apll&amp;gt; statements to narrow the conditions under which the block of statements is executed.  The &amp;lt;apll&amp;gt;:andif&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;:orif&amp;lt;/apll&amp;gt; statements may not be mixed after an &amp;lt;apll&amp;gt;:until&amp;lt;/apll&amp;gt; statement.&lt;br /&gt;
&lt;br /&gt;
To interrupt the flow of control within a block of statements, use the &amp;lt;apll&amp;gt;:continue&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;:leave&amp;lt;/apll&amp;gt; keywords.  The former keyword transfers control to the end of the block continuing with the next repetition, skipping the statements between the &amp;lt;apll&amp;gt;:continue&amp;lt;/apll&amp;gt; and matching &amp;lt;apll&amp;gt;:endrepeat&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;:until&amp;lt;/apll&amp;gt; keywords.  The latter keyword exits the &amp;lt;apll&amp;gt;:repeat&amp;lt;/apll&amp;gt; loop entirely and transfers control to the statement after the matching &amp;lt;apll&amp;gt;:endrepeat&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;:until&amp;lt;/apll&amp;gt; statement.  Typically, these two keywords appear within &amp;lt;apll&amp;gt;:if&amp;lt;/apll&amp;gt; statements.&lt;br /&gt;
&lt;br /&gt;
== RETURN Statement ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;:return&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This statement exits the current function and is equivalent to &amp;lt;apll&amp;gt;→0&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== SELECT/SWITCH Statements ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;:select &amp;lt;i&amp;gt;expr1&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;:case &amp;lt;i&amp;gt;expr2&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
... (Block of statements)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;:caselist &amp;lt;i&amp;gt;expr3&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
... (Block of statements)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;:else&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
... (Block of statements)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;:endselect&amp;lt;/apll&amp;gt;&lt;br /&gt;
  &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;b&amp;gt;OR&amp;lt;/b&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;:switch &amp;lt;i&amp;gt;expr1&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;:case &amp;lt;i&amp;gt;expr2&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
... (Block of statements)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;:caselist &amp;lt;i&amp;gt;expr3&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
... (Block of statements)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;:else&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
... (Block of statements)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;:endswitch&amp;lt;/apll&amp;gt;&lt;br /&gt;
  &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This statement provides a mechanism for making a choice from multiple cases as to which block of statements is executed.  The &amp;lt;apll&amp;gt;:select&amp;lt;/apll&amp;gt; statement expression is evaluated and compared against each successive &amp;lt;apll&amp;gt;:case&amp;lt;/apll&amp;gt; expression and the successive items in each &amp;lt;apll&amp;gt;:caselist&amp;lt;/apll&amp;gt; expression.  Control is given to the first block of statements whose corresponding expression (or expression item in the case of &amp;lt;apll&amp;gt;:caselist&amp;lt;/apll&amp;gt;) matches the &amp;lt;apll&amp;gt;:select&amp;lt;/apll&amp;gt; expression.&lt;br /&gt;
&lt;br /&gt;
For the &amp;lt;apll&amp;gt;:case&amp;lt;/apll&amp;gt; statement, its expression is compared with the &amp;lt;apll&amp;gt;:select&amp;lt;/apll&amp;gt; statement&#039;s expression.  The comparison uses the Match function (≡), so it takes into account rank and shape at every level.&lt;br /&gt;
&lt;br /&gt;
For the &amp;lt;apll&amp;gt;:caselist&amp;lt;/apll&amp;gt; statement, the successive items in its expression are compared with the &amp;lt;apll&amp;gt;:select&amp;lt;/apll&amp;gt; statement&#039;s expression.  As with the &amp;lt;apll&amp;gt;:case&amp;lt;/apll&amp;gt; statement the comparison uses the Match function.  The &amp;lt;apll&amp;gt;:case&amp;lt;/apll&amp;gt; statements allows you to combine multiple selection criteria into one expression.  It is equivalent to the C language use of multiple &amp;lt;b&amp;gt;case&amp;lt;/b&amp;gt; statements preceding a block of statements.&lt;br /&gt;
&lt;br /&gt;
Unlike the C language &amp;lt;b&amp;gt;switch&amp;lt;/b&amp;gt; statement, the &amp;lt;apll&amp;gt;:case&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;:caselist&amp;lt;/apll&amp;gt; expressions need not be constant, and there may be multiple &amp;lt;apll&amp;gt;:case&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;:caselist&amp;lt;/apll&amp;gt; statements whose expressions evaluate to the same value &amp;amp;mdash; however only the earliest occurrence is selected.&lt;br /&gt;
&lt;br /&gt;
When the last statement in a block of statements is executed, the system exits the &amp;lt;apll&amp;gt;:select&amp;lt;/apll&amp;gt; control structure.  The &amp;lt;apll&amp;gt;:leave&amp;lt;/apll&amp;gt; statement may be used to exit that block before reaching the last statement, similar to the C language &amp;lt;b&amp;gt;break&amp;lt;/b&amp;gt; statement.&lt;br /&gt;
&lt;br /&gt;
Each &amp;lt;apll&amp;gt;:case&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;:caselist&amp;lt;/apll&amp;gt; statement may be followed by zero or more statements which form the block of statements controlled by that statement.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;apll&amp;gt;:select&amp;lt;/apll&amp;gt; statement may be followed by a mixture of zero or more &amp;lt;apll&amp;gt;:case&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;:caselist&amp;lt;/apll&amp;gt; blocks.  Optionally, the &amp;lt;apll&amp;gt;:else&amp;lt;/apll&amp;gt; statement may appear after all &amp;lt;apll&amp;gt;:case&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;:caselist&amp;lt;/apll&amp;gt; statements to handle the case where none of the previous &amp;lt;apll&amp;gt;:case&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;:caselist&amp;lt;/apll&amp;gt; expressions match the &amp;lt;apll&amp;gt;:select&amp;lt;/apll&amp;gt; expression &amp;amp;mdash; in this context, the &amp;lt;apll&amp;gt;:else&amp;lt;/apll&amp;gt; statement is similar to the C language &amp;lt;b&amp;gt;default&amp;lt;/b&amp;gt; statement.&lt;br /&gt;
&lt;br /&gt;
Because of the way &amp;lt;apll&amp;gt;:select&amp;lt;/apll&amp;gt; statements are executed, a line with a &amp;lt;apll&amp;gt;:case&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;:caselist&amp;lt;/apll&amp;gt; statement may not be a branch target; otherwise a &amp;lt;apll&amp;gt;DESTINATION ERROR&amp;lt;/apll&amp;gt; is signaled.  That is, a &amp;lt;apll&amp;gt;:select&amp;lt;/apll&amp;gt; statement may be entered at the top only.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;:switch&amp;lt;/apll&amp;gt; is an alias for &amp;lt;apll&amp;gt;:select&amp;lt;/apll&amp;gt;; in the above discussion wherever &amp;lt;apll&amp;gt;:select&amp;lt;/apll&amp;gt; appears, you may substitute &amp;lt;apll&amp;gt;:switch&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;font color=green&amp;gt;&amp;lt;strong&amp;gt;&lt;br /&gt;
== Cases Branching Example 1 ==&lt;br /&gt;
As an alternative to the Select/Switch control structure(s) above, for a pure original APL solution to Multiple Cases scenarios in a user-function, consider using the following APL control structure. For example the following &amp;lt;u&amp;gt;user-function&amp;lt;/u&amp;gt;, has one local variable (boolCases) with 6 different cases handled:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;BranchingExample1&amp;lt;/u&amp;gt;;boolCases&amp;lt;br&amp;gt;&lt;br /&gt;
[1]   ⍝MULTIPLE CASES: Branching/GoTo Example #1&amp;lt;br&amp;gt;&lt;br /&gt;
[2]   boolCases←0 1 1 1 0 0 &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; ⍝Leftmost boolean 1 determines which case or block will be executed { 0 &amp;lt;u&amp;gt;1&amp;lt;/u&amp;gt; 1 1 0 0 }&amp;lt;br&amp;gt;&lt;br /&gt;
[3]   →boolCases/(Label1 &amp;lt;u&amp;gt;Label2&amp;lt;/u&amp;gt; Label3 Label4 Label5 Label6)&amp;lt;br&amp;gt;&lt;br /&gt;
[4]   &#039;Did NOT branch, Case ELSE.&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[5]   →Next1&amp;lt;br&amp;gt;&lt;br /&gt;
[6]   Label1: &#039;Do this, Label1&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[7]   →Next1&amp;lt;br&amp;gt;&lt;br /&gt;
[8]   &amp;lt;u&amp;gt;Label2&amp;lt;/u&amp;gt;: &#039;Do this, Label2&#039; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; ⍝This case &amp;lt;u&amp;gt;will&amp;lt;/u&amp;gt; get branched to based on boolCases!&amp;lt;br&amp;gt;&lt;br /&gt;
[9]   →Next1&amp;lt;br&amp;gt;&lt;br /&gt;
[10]  Label3: &#039;Do this, Label3&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[11]  →Next1&amp;lt;br&amp;gt;&lt;br /&gt;
[12]  Label4: &#039;Do this, Label4&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[13]  →Next1&amp;lt;br&amp;gt;&lt;br /&gt;
[14]  Label5: &#039;Do this, Label5&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[15]  →Next1&amp;lt;br&amp;gt;&lt;br /&gt;
[16]  Label6: &#039;Do this, Label6&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[17]  Next1: &#039;Code continues here.&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; BranchingExample1 &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; ⍝User-session, &amp;lt;u&amp;gt;BranchingExample1&amp;lt;/u&amp;gt; &#039;&#039;typed in by user&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
Do this, Label2&amp;lt;br&amp;gt;&lt;br /&gt;
Code continues here.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/strong&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WHILE Statement ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; rules=&amp;quot;none&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:while &amp;lt;i&amp;gt;expr1&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td style=&amp;quot;border-right: solid 1px black;&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:while &amp;lt;i&amp;gt;expr1&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;... (Block of statements)&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td style=&amp;quot;border-right: solid 1px black;&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;... (Block of statements)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:endwhile&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td style=&amp;quot;border-right: solid 1px black;&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:until &amp;lt;i&amp;gt;expr2&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This statement executes a block of statements repeatedly until the &amp;lt;apll&amp;gt;:while&amp;lt;/apll&amp;gt; expression is false, or the &amp;lt;apll&amp;gt;:until&amp;lt;/apll&amp;gt; expression is true, or control transfers out of the Control Structure.&lt;br /&gt;
&lt;br /&gt;
The expressions must evaluate to a Boolean-valued scalar or one-element vector.&lt;br /&gt;
&lt;br /&gt;
In the righthand form above, if the &amp;lt;apll&amp;gt;:while&amp;lt;/apll&amp;gt; expression evaluates to a scalar or one-element vector whose value is &amp;lt;apll&amp;gt;1&amp;lt;/apll&amp;gt;, the block of statements is executed and then the &amp;lt;apll&amp;gt;:until&amp;lt;/apll&amp;gt; expression is executed.  It must evaluate to a Boolean-valued scalar or one-element vector.  If the &amp;lt;apll&amp;gt;:until&amp;lt;/apll&amp;gt; expression is true, the Control Structure terminates and execution continues with the statement after the &amp;lt;apll&amp;gt;:until&amp;lt;/apll&amp;gt; statement; if the &amp;lt;apll&amp;gt;:until&amp;lt;/apll&amp;gt; expression is false, execution continues at the start of the Control Structure.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;apll&amp;gt;:while&amp;lt;/apll&amp;gt; statement may be followed by zero or more &amp;lt;apll&amp;gt;:andif&amp;lt;/apll&amp;gt; statements to narrow the conditions under which the block of statements is executed, or it may be followed by zero or more &amp;lt;apll&amp;gt;:orif&amp;lt;/apll&amp;gt; statements to widen the conditions under which the block of statements is executed.  The &amp;lt;apll&amp;gt;:andif&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;:orif&amp;lt;/apll&amp;gt; statements may not be mixed after a &amp;lt;apll&amp;gt;:while&amp;lt;/apll&amp;gt; statement.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;apll&amp;gt;:until&amp;lt;/apll&amp;gt; statement may be followed by zero or more &amp;lt;apll&amp;gt;:andif&amp;lt;/apll&amp;gt; statements to widen the conditions under which execution the block of statements is executed, or it may be followed by zero or more &amp;lt;apll&amp;gt;:orif&amp;lt;/apll&amp;gt; statements to narrow the conditions under which the block of statements is executed.  The &amp;lt;apll&amp;gt;:andif&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;:orif&amp;lt;/apll&amp;gt; statements may not be mixed after an &amp;lt;apll&amp;gt;:until&amp;lt;/apll&amp;gt; statement.&lt;br /&gt;
&lt;br /&gt;
To interrupt the flow of control within a block of statements, use the &amp;lt;apll&amp;gt;:continue&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;:leave&amp;lt;/apll&amp;gt; keywords.  The former keyword transfers control to the end of the block continuing with the next repetition, skipping the statements between the &amp;lt;apll&amp;gt;:continue&amp;lt;/apll&amp;gt; and matching &amp;lt;apll&amp;gt;:endwhile&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;:until&amp;lt;/apll&amp;gt; keywords, but evaluating and acting upon an &amp;lt;apll&amp;gt;:until&amp;lt;/apll&amp;gt; statement, if present.  The latter keyword exits the &amp;lt;apll&amp;gt;:while&amp;lt;/apll&amp;gt; loop entirely and transfers control to the statement after the matching &amp;lt;apll&amp;gt;:endwhile&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;:until&amp;lt;/apll&amp;gt; statement.  Typically, these two keywords appear within &amp;lt;apll&amp;gt;:if&amp;lt;/apll&amp;gt; statements.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Examples]]&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Control_Structures&amp;diff=3666</id>
		<title>Control Structures</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Control_Structures&amp;diff=3666"/>
		<updated>2019-10-13T22:52:50Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: /* WHILE Statement */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Overview ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; rules=&amp;quot;none&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
    &amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:for &amp;lt;i&amp;gt;varname&amp;lt;/i&amp;gt; :in &amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt; ⋄ &amp;lt;/apll&amp;gt;...&amp;lt;apll&amp;gt; ⋄ :endfor&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;Loop through the elements of &amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt; assigning each value to &amp;lt;i&amp;gt;varname&amp;lt;/i&amp;gt;, and then execute the statements between &amp;lt;apll&amp;gt;:for&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;:endfor&amp;lt;/apll&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:forlcl &amp;lt;i&amp;gt;varname&amp;lt;/i&amp;gt; :in &amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt; ⋄ &amp;lt;/apll&amp;gt;...&amp;lt;apll&amp;gt; ⋄ :endforlcl&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;Same as &amp;lt;apll&amp;gt;:for&amp;lt;/apll&amp;gt; except that the &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;varname&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt; is localized to the &amp;lt;apll&amp;gt;:forlcl&amp;lt;/apll&amp;gt; / &amp;lt;apll&amp;gt;:endforlcl&amp;lt;/apll&amp;gt; control structure.&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:goto &amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;Execute &amp;lt;apll&amp;gt;{goto}&amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:if &amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt; ⋄ &amp;lt;/apll&amp;gt;...&amp;lt;apll&amp;gt; ⋄ :endif&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;Execute the statements between &amp;lt;apll&amp;gt;:if&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;:endif&amp;lt;/apll&amp;gt; iff &amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt; is &amp;lt;apll&amp;gt;1&amp;lt;/apll&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:repeat ⋄ &amp;lt;/apll&amp;gt;...&amp;lt;apll&amp;gt; ⋄ :endrepeat&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;Repeatedly execute the statements between &amp;lt;apll&amp;gt;:repeat&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;:endrepeat&amp;lt;/apll&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:repeat ⋄ &amp;lt;/apll&amp;gt;...&amp;lt;apll&amp;gt; ⋄ :until &amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;Repeatedly execute the statements between &amp;lt;apll&amp;gt;:repeat&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;:until&amp;lt;/apll&amp;gt; until &amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt; is &amp;lt;apll&amp;gt;0&amp;lt;/apll&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:return&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;Execute &amp;lt;apll&amp;gt;{goto}0&amp;lt;/apll&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:select &amp;lt;i&amp;gt;expr1&amp;lt;/i&amp;gt; ⋄ :case &amp;lt;i&amp;gt;expr2&amp;lt;/i&amp;gt; ⋄ &amp;lt;/apll&amp;gt;...&amp;lt;apll&amp;gt; &amp;lt;/apll&amp;gt;&amp;lt;br/&amp;gt; &amp;lt;apll&amp;gt; ⋄ :caselist &amp;lt;i&amp;gt;expr3&amp;lt;/i&amp;gt; ⋄ &amp;lt;/apll&amp;gt;...&amp;lt;apll&amp;gt; ⋄ :endselect&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;Execute a specific block of statements depending upon which &amp;lt;apll&amp;gt;:case&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;:caselist&amp;lt;/apll&amp;gt; expression matches &amp;lt;i&amp;gt;expr1&amp;lt;/i&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:switch &amp;lt;i&amp;gt;expr1&amp;lt;/i&amp;gt; ⋄ :case &amp;lt;i&amp;gt;expr2&amp;lt;/i&amp;gt; ⋄ &amp;lt;/apll&amp;gt;...&amp;lt;apll&amp;gt; &amp;lt;/apll&amp;gt;&amp;lt;br/&amp;gt; &amp;lt;apll&amp;gt; ⋄ :caselist &amp;lt;i&amp;gt;expr3&amp;lt;/i&amp;gt; ⋄ &amp;lt;/apll&amp;gt;...&amp;lt;apll&amp;gt; ⋄ :endswitch&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;Same as &amp;lt;apll&amp;gt;:select&amp;lt;/apll&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:while &amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt; ⋄ &amp;lt;/apll&amp;gt;...&amp;lt;apll&amp;gt; ⋄ :endwhile&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;Repeatedly execute the statements between &amp;lt;apll&amp;gt;:while&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;:endwhile&amp;lt;/apll&amp;gt; while &amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt; is &amp;lt;apll&amp;gt;1&amp;lt;/apll&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;tr valign=&amp;quot;top&amp;quot;&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:while &amp;lt;i&amp;gt;expr1&amp;lt;/i&amp;gt; ⋄ &amp;lt;/apll&amp;gt;...&amp;lt;apll&amp;gt; ⋄ :until &amp;lt;i&amp;gt;expr2&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;Repeatedly execute the statements between &amp;lt;apll&amp;gt;:while&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;:until&amp;lt;/apll&amp;gt; while &amp;lt;i&amp;gt;expr1&amp;lt;/i&amp;gt; is &amp;lt;apll&amp;gt;1&amp;lt;/apll&amp;gt; and &amp;lt;i&amp;gt;expr2&amp;lt;/i&amp;gt; is &amp;lt;apll&amp;gt;0&amp;lt;/apll&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;All Control Structures may be placed all or partly on one line as in &amp;lt;apll&amp;gt;:for I :in {iota}12 ⋄ &amp;lt;/apll&amp;gt;...&amp;lt;apll&amp;gt; ⋄ :endfor&amp;lt;/apll&amp;gt; (very convenient for use in immediate execution mode), or on multiple lines as in&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;:for I :in {iota}12&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
...&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;:endfor&amp;lt;/apll&amp;gt;&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;As usual for any statement, a label may be used at the beginning of any line even if it starts with a Control Structure.  For example,&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;[3]   L1::if I &amp;amp;lt; 10 ⋄ &amp;lt;/apll&amp;gt;...&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;li&amp;gt;&amp;lt;p&amp;gt;Each Control Structure that closes with a statement-specific keyword (&amp;lt;apll&amp;gt;:endfor&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;:endforlcl&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;:endif&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;:endrepeat&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;:endselect&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;:endswitch&amp;lt;/apll&amp;gt;, and &amp;lt;apll&amp;gt;:endwhile&amp;lt;/apll&amp;gt;), may instead close with the &amp;lt;apll&amp;gt;:end&amp;lt;/apll&amp;gt; keyword.&amp;lt;/p&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== FOR/FORLCL Statements ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; rules=&amp;quot;none&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:for &amp;lt;i&amp;gt;varname&amp;lt;/i&amp;gt; :in &amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td style=&amp;quot;border-right: solid 1px black;&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:forlcl &amp;lt;i&amp;gt;varname&amp;lt;/i&amp;gt; :in &amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;... (Block of statements)&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td style=&amp;quot;border-right: solid 1px black;&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;... (Block of statements)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:endfor&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td style=&amp;quot;border-right: solid 1px black;&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:endforlcl&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
These statements evaluate &amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt; once, loop through its elements, assign each successive value to &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;varname&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;, and then execute the block of statements once for each value in &amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt;.  The &amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt; may be of any type (including character and nested), any rank, and any shape.  If &amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt; is empty, the block of statements is skipped.&lt;br /&gt;
&lt;br /&gt;
With the &amp;lt;apll&amp;gt;:for&amp;lt;/apll&amp;gt; statement, the &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;varname&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt; is not localized to the &amp;lt;apll&amp;gt;:for&amp;lt;/apll&amp;gt; loop; upon exiting the loop, &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;varname&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt; has the last value assigned to it by the &amp;lt;apll&amp;gt;:for&amp;lt;/apll&amp;gt; loop.&lt;br /&gt;
&lt;br /&gt;
With the &amp;lt;apll&amp;gt;:forlcl&amp;lt;/apll&amp;gt; statement, the &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;varname&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt; is localized to the &amp;lt;apll&amp;gt;:forlcl&amp;lt;/apll&amp;gt; loop; upon exiting the loop, &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;varname&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt; has the value assigned to it before the &amp;lt;apll&amp;gt;:forlcl&amp;lt;/apll&amp;gt; loop started.&lt;br /&gt;
&lt;br /&gt;
To interrupt the flow of control within a block of statements, use the &amp;lt;apll&amp;gt;:continue&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;:leave&amp;lt;/apll&amp;gt; keywords.  The former keyword transfers control to the end of the block continuing with the next iteration, thus skipping the statements between the &amp;lt;apll&amp;gt;:continue&amp;lt;/apll&amp;gt; and matching &amp;lt;apll&amp;gt;:endfor&amp;lt;/apll&amp;gt;/&amp;lt;apll&amp;gt;:endforlcl&amp;lt;/apll&amp;gt; keywords.  The latter keyword exits the &amp;lt;apll&amp;gt;:for&amp;lt;/apll&amp;gt;/&amp;lt;apll&amp;gt;:forlcl&amp;lt;/apll&amp;gt; loop entirely and transfers control to the statement after the matching &amp;lt;apll&amp;gt;:endfor&amp;lt;/apll&amp;gt;/&amp;lt;apll&amp;gt;:endforlcl&amp;lt;/apll&amp;gt; statement.  Typically, these two keywords appear within &amp;lt;apll&amp;gt;:if&amp;lt;/apll&amp;gt;/&amp;lt;apll&amp;gt;:endif&amp;lt;/apll&amp;gt; statements.&lt;br /&gt;
&lt;br /&gt;
== GOTO Statement ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;:goto &amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This statement transfers control to the line number specified in &amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt;.  The value of &amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt; must be a numeric simple scalar or one-element vector.  This statement is equivalent to &amp;lt;tt&amp;gt;[[→]]&amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt;&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== IF Statement ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;:if &amp;lt;i&amp;gt;expr1&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
... (Block of statements)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;:elseif &amp;lt;i&amp;gt;expr2&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
... (Block of statements)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;:else&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
... (Block of statements)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;:endif&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This statement conditionally executes a block of statements.&lt;br /&gt;
&lt;br /&gt;
Each expression must evaluate to a Boolean-valued scalar or one-element vector.&lt;br /&gt;
&lt;br /&gt;
Each &amp;lt;apll&amp;gt;:if&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;:elseif&amp;lt;/apll&amp;gt; statement may be followed by zero or more statements which form the block of statements controlled by that statement.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;apll&amp;gt;:if&amp;lt;/apll&amp;gt; statement may be followed by zero or more &amp;lt;apll&amp;gt;:elseif&amp;lt;/apll&amp;gt; blocks.  Optionally, the &amp;lt;apll&amp;gt;:else&amp;lt;/apll&amp;gt; statement may appear after all &amp;lt;apll&amp;gt;:elseif&amp;lt;/apll&amp;gt; statements to handle the case where none of the previous expressions was true (evaluated to a &amp;lt;apll&amp;gt;1&amp;lt;/apll&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Each &amp;lt;apll&amp;gt;:if&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;:elseif&amp;lt;/apll&amp;gt; statement may be followed by zero or more &amp;lt;apll&amp;gt;:andif&amp;lt;/apll&amp;gt; statements to narrow the conditions under which the following block of statements is executed, or may be followed by zero or more &amp;lt;apll&amp;gt;:orif&amp;lt;/apll&amp;gt; statements to widen the conditions under which the following block of statements is executed.  The &amp;lt;apll&amp;gt;:andif&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;:orif&amp;lt;/apll&amp;gt; statements may not be mixed within any &amp;lt;apll&amp;gt;:if&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;:elseif&amp;lt;/apll&amp;gt; statement.&lt;br /&gt;
&lt;br /&gt;
== REPEAT Statement ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; rules=&amp;quot;none&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:repeat&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td style=&amp;quot;border-right: solid 1px black;&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:repeat&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;... (Block of statements)&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td style=&amp;quot;border-right: solid 1px black;&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;... (Block of statements)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:endrepeat&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td style=&amp;quot;border-right: solid 1px black;&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:until &amp;lt;i&amp;gt;expr&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This statement executes a block of statements repeatedly (but at least once) until the &amp;lt;apll&amp;gt;:until&amp;lt;/apll&amp;gt; expression is true, or control transfers out of the Control Structure.&lt;br /&gt;
&lt;br /&gt;
In the righthand form above, the block of statements is executed and then the expression is executed.  It must evaluate to a Boolean-valued scalar or one-element vector.  If the expression is true, the Control Structure terminates and execution continues with the statement after the &amp;lt;apll&amp;gt;:until&amp;lt;/apll&amp;gt; statement; if the expression is false, execution continues at the start of the Control Structure.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;apll&amp;gt;:until&amp;lt;/apll&amp;gt; statement may be followed by zero or more &amp;lt;apll&amp;gt;:andif&amp;lt;/apll&amp;gt; statements to widen the conditions under which the block of statements is executed, or it may be followed by zero or more &amp;lt;apll&amp;gt;:orif&amp;lt;/apll&amp;gt; statements to narrow the conditions under which the block of statements is executed.  The &amp;lt;apll&amp;gt;:andif&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;:orif&amp;lt;/apll&amp;gt; statements may not be mixed after an &amp;lt;apll&amp;gt;:until&amp;lt;/apll&amp;gt; statement.&lt;br /&gt;
&lt;br /&gt;
To interrupt the flow of control within a block of statements, use the &amp;lt;apll&amp;gt;:continue&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;:leave&amp;lt;/apll&amp;gt; keywords.  The former keyword transfers control to the end of the block continuing with the next repetition, skipping the statements between the &amp;lt;apll&amp;gt;:continue&amp;lt;/apll&amp;gt; and matching &amp;lt;apll&amp;gt;:endrepeat&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;:until&amp;lt;/apll&amp;gt; keywords.  The latter keyword exits the &amp;lt;apll&amp;gt;:repeat&amp;lt;/apll&amp;gt; loop entirely and transfers control to the statement after the matching &amp;lt;apll&amp;gt;:endrepeat&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;:until&amp;lt;/apll&amp;gt; statement.  Typically, these two keywords appear within &amp;lt;apll&amp;gt;:if&amp;lt;/apll&amp;gt; statements.&lt;br /&gt;
&lt;br /&gt;
== RETURN Statement ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;:return&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This statement exits the current function and is equivalent to &amp;lt;apll&amp;gt;→0&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== SELECT/SWITCH Statements ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;:select &amp;lt;i&amp;gt;expr1&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;:case &amp;lt;i&amp;gt;expr2&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
... (Block of statements)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;:caselist &amp;lt;i&amp;gt;expr3&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
... (Block of statements)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;:else&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
... (Block of statements)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;:endselect&amp;lt;/apll&amp;gt;&lt;br /&gt;
  &amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;b&amp;gt;OR&amp;lt;/b&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;:switch &amp;lt;i&amp;gt;expr1&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;:case &amp;lt;i&amp;gt;expr2&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
... (Block of statements)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;:caselist &amp;lt;i&amp;gt;expr3&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
... (Block of statements)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;:else&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
... (Block of statements)&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;:endswitch&amp;lt;/apll&amp;gt;&lt;br /&gt;
  &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This statement provides a mechanism for making a choice from multiple cases as to which block of statements is executed.  The &amp;lt;apll&amp;gt;:select&amp;lt;/apll&amp;gt; statement expression is evaluated and compared against each successive &amp;lt;apll&amp;gt;:case&amp;lt;/apll&amp;gt; expression and the successive items in each &amp;lt;apll&amp;gt;:caselist&amp;lt;/apll&amp;gt; expression.  Control is given to the first block of statements whose corresponding expression (or expression item in the case of &amp;lt;apll&amp;gt;:caselist&amp;lt;/apll&amp;gt;) matches the &amp;lt;apll&amp;gt;:select&amp;lt;/apll&amp;gt; expression.&lt;br /&gt;
&lt;br /&gt;
For the &amp;lt;apll&amp;gt;:case&amp;lt;/apll&amp;gt; statement, its expression is compared with the &amp;lt;apll&amp;gt;:select&amp;lt;/apll&amp;gt; statement&#039;s expression.  The comparison uses the Match function (≡), so it takes into account rank and shape at every level.&lt;br /&gt;
&lt;br /&gt;
For the &amp;lt;apll&amp;gt;:caselist&amp;lt;/apll&amp;gt; statement, the successive items in its expression are compared with the &amp;lt;apll&amp;gt;:select&amp;lt;/apll&amp;gt; statement&#039;s expression.  As with the &amp;lt;apll&amp;gt;:case&amp;lt;/apll&amp;gt; statement the comparison uses the Match function.  The &amp;lt;apll&amp;gt;:case&amp;lt;/apll&amp;gt; statements allows you to combine multiple selection criteria into one expression.  It is equivalent to the C language use of multiple &amp;lt;b&amp;gt;case&amp;lt;/b&amp;gt; statements preceding a block of statements.&lt;br /&gt;
&lt;br /&gt;
Unlike the C language &amp;lt;b&amp;gt;switch&amp;lt;/b&amp;gt; statement, the &amp;lt;apll&amp;gt;:case&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;:caselist&amp;lt;/apll&amp;gt; expressions need not be constant, and there may be multiple &amp;lt;apll&amp;gt;:case&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;:caselist&amp;lt;/apll&amp;gt; statements whose expressions evaluate to the same value &amp;amp;mdash; however only the earliest occurrence is selected.&lt;br /&gt;
&lt;br /&gt;
When the last statement in a block of statements is executed, the system exits the &amp;lt;apll&amp;gt;:select&amp;lt;/apll&amp;gt; control structure.  The &amp;lt;apll&amp;gt;:leave&amp;lt;/apll&amp;gt; statement may be used to exit that block before reaching the last statement, similar to the C language &amp;lt;b&amp;gt;break&amp;lt;/b&amp;gt; statement.&lt;br /&gt;
&lt;br /&gt;
Each &amp;lt;apll&amp;gt;:case&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;:caselist&amp;lt;/apll&amp;gt; statement may be followed by zero or more statements which form the block of statements controlled by that statement.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;apll&amp;gt;:select&amp;lt;/apll&amp;gt; statement may be followed by a mixture of zero or more &amp;lt;apll&amp;gt;:case&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;:caselist&amp;lt;/apll&amp;gt; blocks.  Optionally, the &amp;lt;apll&amp;gt;:else&amp;lt;/apll&amp;gt; statement may appear after all &amp;lt;apll&amp;gt;:case&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;:caselist&amp;lt;/apll&amp;gt; statements to handle the case where none of the previous &amp;lt;apll&amp;gt;:case&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;:caselist&amp;lt;/apll&amp;gt; expressions match the &amp;lt;apll&amp;gt;:select&amp;lt;/apll&amp;gt; expression &amp;amp;mdash; in this context, the &amp;lt;apll&amp;gt;:else&amp;lt;/apll&amp;gt; statement is similar to the C language &amp;lt;b&amp;gt;default&amp;lt;/b&amp;gt; statement.&lt;br /&gt;
&lt;br /&gt;
Because of the way &amp;lt;apll&amp;gt;:select&amp;lt;/apll&amp;gt; statements are executed, a line with a &amp;lt;apll&amp;gt;:case&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;:caselist&amp;lt;/apll&amp;gt; statement may not be a branch target; otherwise a &amp;lt;apll&amp;gt;DESTINATION ERROR&amp;lt;/apll&amp;gt; is signaled.  That is, a &amp;lt;apll&amp;gt;:select&amp;lt;/apll&amp;gt; statement may be entered at the top only.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;:switch&amp;lt;/apll&amp;gt; is an alias for &amp;lt;apll&amp;gt;:select&amp;lt;/apll&amp;gt;; in the above discussion wherever &amp;lt;apll&amp;gt;:select&amp;lt;/apll&amp;gt; appears, you may substitute &amp;lt;apll&amp;gt;:switch&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;font color=green&amp;gt;&amp;lt;strong&amp;gt;&lt;br /&gt;
== Cases Branching Example 1 ==&lt;br /&gt;
As an alternative to the Select/Switch control structure(s) above, for a pure original APL solution to Multiple Cases scenarios in a user-function, consider using the following APL control structure. For example the following &amp;lt;u&amp;gt;user-function&amp;lt;/u&amp;gt;, has one local variable (boolCases) with 6 different cases handled:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;BranchingExample1&amp;lt;/u&amp;gt;;boolCases&amp;lt;br&amp;gt;&lt;br /&gt;
[1]   ⍝MULTIPLE CASES: Branching/GoTo Example #1&amp;lt;br&amp;gt;&lt;br /&gt;
[2]   boolCases←0 1 1 1 0 0 &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; ⍝Leftmost boolean 1 determines which case or block will be executed { 0 &amp;lt;u&amp;gt;1&amp;lt;/u&amp;gt; 1 1 0 0 }&amp;lt;br&amp;gt;&lt;br /&gt;
[3]   →boolCases/(Label1 &amp;lt;u&amp;gt;Label2&amp;lt;/u&amp;gt; Label3 Label4 Label5 Label6)&amp;lt;br&amp;gt;&lt;br /&gt;
[4]   &#039;Did NOT branch, Case ELSE.&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[5]   →Next1&amp;lt;br&amp;gt;&lt;br /&gt;
[6]   Label1: &#039;Do this, Label1&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[7]   →Next1&amp;lt;br&amp;gt;&lt;br /&gt;
[8]   &amp;lt;u&amp;gt;Label2&amp;lt;/u&amp;gt;: &#039;Do this, Label2&#039; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; ⍝This case &amp;lt;u&amp;gt;will&amp;lt;/u&amp;gt; get branched to based on boolCases!&amp;lt;br&amp;gt;&lt;br /&gt;
[9]   →Next1&amp;lt;br&amp;gt;&lt;br /&gt;
[10]  Label3: &#039;Do this, Label3&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[11]  →Next1&amp;lt;br&amp;gt;&lt;br /&gt;
[12]  Label4: &#039;Do this, Label4&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[13]  →Next1&amp;lt;br&amp;gt;&lt;br /&gt;
[14]  Label5: &#039;Do this, Label5&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[15]  →Next1&amp;lt;br&amp;gt;&lt;br /&gt;
[16]  Label6: &#039;Do this, Label6&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
[17]  Next1: &#039;Code continues here.&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; BranchingExample1 &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; ⍝User-session, &amp;lt;u&amp;gt;BranchingExample1&amp;lt;/u&amp;gt; &#039;&#039;typed in by user&#039;&#039;.&amp;lt;br&amp;gt;&lt;br /&gt;
Do this, Label2&amp;lt;br&amp;gt;&lt;br /&gt;
Code continues here.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;/strong&amp;gt;&amp;lt;/font&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== WHILE Statement ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; rules=&amp;quot;none&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:while &amp;lt;i&amp;gt;expr1&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td style=&amp;quot;border-right: solid 1px black;&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:while &amp;lt;i&amp;gt;expr1&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;... (Block of statements)&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td style=&amp;quot;border-right: solid 1px black;&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;... (Block of statements)&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:endwhile&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td style=&amp;quot;border-right: solid 1px black;&amp;quot;&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;:until &amp;lt;i&amp;gt;expr2&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This statement executes a block of statements repeatedly until the &amp;lt;apll&amp;gt;:while&amp;lt;/apll&amp;gt; expression is false, or the &amp;lt;apll&amp;gt;:until&amp;lt;/apll&amp;gt; expression is true, or control transfers out of the Control Structure.&lt;br /&gt;
&lt;br /&gt;
The expressions must evaluate to a Boolean-valued scalar or one-element vector.&lt;br /&gt;
&lt;br /&gt;
In the righthand form above, if the &amp;lt;apll&amp;gt;:while&amp;lt;/apll&amp;gt; expression evaluates to a scalar or one-element vector whose value is &amp;lt;apll&amp;gt;1&amp;lt;/apll&amp;gt;, the block of statements is executed and then the &amp;lt;apll&amp;gt;:until&amp;lt;/apll&amp;gt; expression is executed.  It must evaluate to a Boolean-valued scalar or one-element vector.  If the &amp;lt;apll&amp;gt;:until&amp;lt;/apll&amp;gt; expression is true, the Control Structure terminates and execution continues with the statement after the &amp;lt;apll&amp;gt;:until&amp;lt;/apll&amp;gt; statement; if the &amp;lt;apll&amp;gt;:until&amp;lt;/apll&amp;gt; expression is false, execution continues at the start of the Control Structure.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;apll&amp;gt;:while&amp;lt;/apll&amp;gt; statement may be followed by zero or more &amp;lt;apll&amp;gt;:andif&amp;lt;/apll&amp;gt; statements to narrow the conditions under which the block of statements is executed, or it may be followed by zero or more &amp;lt;apll&amp;gt;:orif&amp;lt;/apll&amp;gt; statements to widen the conditions under which the block of statements is executed.  The &amp;lt;apll&amp;gt;:andif&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;:orif&amp;lt;/apll&amp;gt; statements may not be mixed after a &amp;lt;apll&amp;gt;:while&amp;lt;/apll&amp;gt; statement.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;apll&amp;gt;:until&amp;lt;/apll&amp;gt; statement may be followed by zero or more &amp;lt;apll&amp;gt;:andif&amp;lt;/apll&amp;gt; statements to widen the conditions under which execution the block of statements is executed, or it may be followed by zero or more &amp;lt;apll&amp;gt;:orif&amp;lt;/apll&amp;gt; statements to narrow the conditions under which the block of statements is executed.  The &amp;lt;apll&amp;gt;:andif&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;:orif&amp;lt;/apll&amp;gt; statements may not be mixed after an &amp;lt;apll&amp;gt;:until&amp;lt;/apll&amp;gt; statement.&lt;br /&gt;
&lt;br /&gt;
To interrupt the flow of control within a block of statements, use the &amp;lt;apll&amp;gt;:continue&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;:leave&amp;lt;/apll&amp;gt; keywords.  The former keyword transfers control to the end of the block continuing with the next repetition, skipping the statements between the &amp;lt;apll&amp;gt;:continue&amp;lt;/apll&amp;gt; and matching &amp;lt;apll&amp;gt;:endwhile&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;:until&amp;lt;/apll&amp;gt; keywords, but evaluating and acting upon an &amp;lt;apll&amp;gt;:until&amp;lt;/apll&amp;gt; statement, if present.  The latter keyword exits the &amp;lt;apll&amp;gt;:while&amp;lt;/apll&amp;gt; loop entirely and transfers control to the statement after the matching &amp;lt;apll&amp;gt;:endwhile&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;:until&amp;lt;/apll&amp;gt; statement.  Typically, these two keywords appear within &amp;lt;apll&amp;gt;:if&amp;lt;/apll&amp;gt; statements.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category;Examples]]&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Composition&amp;diff=3665</id>
		<title>Composition</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Composition&amp;diff=3665"/>
		<updated>2019-10-13T22:50:02Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: t/c&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; rules=&amp;quot;none&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
    &amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;apll&amp;gt;Z←L f⍥g R&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;returns &amp;lt;apll&amp;gt;(g L) f g R&amp;lt;/apll&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; are arrays.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;f&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;g&amp;lt;/apll&amp;gt; are functions.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Examples]]&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Another_Approach_To_Building&amp;diff=3664</id>
		<title>Another Approach To Building</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Another_Approach_To_Building&amp;diff=3664"/>
		<updated>2019-10-13T22:47:51Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: t/c&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Need to set some system environment variables: == &lt;br /&gt;
&lt;br /&gt;
Right click on My Computer and select Properties.  Then select&lt;br /&gt;
the &amp;quot;Advanced&amp;quot; tab and then press the &amp;quot;Environment Variables&amp;quot; button.&lt;br /&gt;
Add or verify these system environment variables.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
REM Visual Studio 2008 C/C++ compiler&lt;br /&gt;
MSVC &amp;lt;-- C:\Program Files\Microsoft Visual Studio 9.0\VC\&lt;br /&gt;
&lt;br /&gt;
REM Contains BISON and GREP&lt;br /&gt;
PARDIR &amp;lt;-- C:\tools\GnuWin32&lt;br /&gt;
&lt;br /&gt;
REM Bison Parser Generator&lt;br /&gt;
PARGEN &amp;lt;-- C:\tools\GnuWin32\bin\bison.exe&lt;br /&gt;
&lt;br /&gt;
PATH &amp;lt;-- %PARDIR%\bin;C:\tools\PHP\;%PATH%&lt;br /&gt;
&lt;br /&gt;
REM PHP Resource Compile&lt;br /&gt;
PHPRC &amp;lt;-- C:\tools\PHP\&lt;br /&gt;
&lt;br /&gt;
REM Windows SDK&lt;br /&gt;
SDK &amp;lt;-- C:\Program Files\Microsoft SDKs\Windows\v6.0A\&lt;br /&gt;
&lt;br /&gt;
REM Set by Visual Studio 2008 install&lt;br /&gt;
REM Need to access NMAKE&lt;br /&gt;
VS90COMNTOOLS &amp;lt;-- c:\Program Files\Microsoft Visual Studio 9.0\Common7\Tools\&lt;br /&gt;
&lt;br /&gt;
REM 7-zip file compression&lt;br /&gt;
REM double quotes required&lt;br /&gt;
ZIPPRG &amp;lt;-- &amp;quot;C:\Program Files\7-Zip\7z.exe&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Modify mk32.bat and mkd32.bat ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
REM comment out &amp;quot;@echo off&amp;quot;&lt;br /&gt;
REM Add the call vsvars32.bat to set more Visual Studio 2008 environment&lt;br /&gt;
rem @echo off&lt;br /&gt;
call &amp;quot;%VS90COMNTOOLS%vsvars32.bat&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Install PHP, 7-zip, Bison, and Grep On Windows ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;PHP&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[http://php.net/downloads.php PHPMainPage]&lt;br /&gt;
&lt;br /&gt;
[http://windows.php.net/download/ PHPForWindows]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;7-zip&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[http://www.7-zip.org/download.html Get7Zip]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Bison&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[http://gnuwin32.sourceforge.net/packages/bison.htm GetWinBison]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Grep&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
[http://sourceforge.net/projects/gnuwin32/files/ GetWinGrep]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Double Quote Some NMAKE Vars In makefile.w32 ==&lt;br /&gt;
&lt;br /&gt;
This make it so Windows filenames with spaces work, such as C:\Program Files\...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Change&lt;br /&gt;
&lt;br /&gt;
    LD=$(MSVC)bin\link.exe&lt;br /&gt;
    CC=$(MSVC)bin\cl.exe&lt;br /&gt;
    RC=$(SDK)Bin\rc.exe&lt;br /&gt;
    ML=$(MSVC)bin\ml.exe&lt;br /&gt;
&lt;br /&gt;
to&lt;br /&gt;
&lt;br /&gt;
    LD=&amp;quot;$(MSVC)bin\link.exe&amp;quot;&lt;br /&gt;
    CC=&amp;quot;$(MSVC)bin\cl.exe&amp;quot;&lt;br /&gt;
    RC=&amp;quot;$(SDK)Bin\rc.exe&amp;quot;&lt;br /&gt;
    ML=&amp;quot;$(MSVC)bin\ml.exe&amp;quot;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Set up qdebug ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Need to get the qdebug files in&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;proj_root&amp;gt;\RET\D32\qdebug&lt;br /&gt;
&lt;br /&gt;
and&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;proj_root&amp;gt;\RET\ND32\qdebug&lt;br /&gt;
&lt;br /&gt;
The three files are:&lt;br /&gt;
&lt;br /&gt;
    QDebug.pro&lt;br /&gt;
    QDEBUG32.DLL&lt;br /&gt;
    QDEBUG32.LIB&lt;br /&gt;
&lt;br /&gt;
These come in the NARS2000 developer tools in the file:&lt;br /&gt;
&lt;br /&gt;
    qdebug.zip&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You have to click on the &amp;quot;Display All Files&amp;quot; button to see these tools at:&lt;br /&gt;
&lt;br /&gt;
[http://www.nars2000.org/download/Download.html DevTools]&lt;br /&gt;
&lt;br /&gt;
== Put the GNU Scientific Library in &amp;lt;proj_root&amp;gt;/gsl ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
Unzip&lt;br /&gt;
&lt;br /&gt;
    gsldir.zip&lt;br /&gt;
&lt;br /&gt;
and copy the contents of the&lt;br /&gt;
&lt;br /&gt;
    gsl\include\gsl&lt;br /&gt;
&lt;br /&gt;
subdirectory to&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;proj_root&amp;gt;\gsl&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Now copy&lt;br /&gt;
&lt;br /&gt;
    gsl\libgsl32-double.lib&lt;br /&gt;
&lt;br /&gt;
and&lt;br /&gt;
&lt;br /&gt;
    \gsl\libgsl64-double.lib&lt;br /&gt;
&lt;br /&gt;
to&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;proj_root&amp;gt;\gsl&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To get NARS2000 developer tool in the file gsldir.zip you have to click on the &amp;quot;Display All Files&amp;quot; button to see these tools at:&lt;br /&gt;
&lt;br /&gt;
[http://www.nars2000.org/download/Download.html|http://www.nars2000.org/download/Download.html DevTools]&lt;br /&gt;
&lt;br /&gt;
--[[User:AlanG01|AlanG01]] 00:49, 29 December 2009 (UTC)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:NARS 2000]]&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Category:Examples&amp;diff=3663</id>
		<title>Category:Examples</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Category:Examples&amp;diff=3663"/>
		<updated>2019-10-13T22:44:25Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: new&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These pages explain how to use APL or how to write code using it.&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Compose&amp;diff=3662</id>
		<title>Compose</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Compose&amp;diff=3662"/>
		<updated>2019-10-13T22:42:10Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;In the following descriptions, &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;g&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt; represent functions and &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;a&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;b&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt; represent variables.&lt;br /&gt;
&lt;br /&gt;
* The form &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt;∘&amp;lt;i&amp;gt;g&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt; may be used both monadically and dyadically.&lt;br /&gt;
:&lt;br /&gt;
:Monadic:  &amp;lt;apll&amp;gt;Z←&amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt;∘&amp;lt;i&amp;gt;g&amp;lt;/i&amp;gt; R&amp;lt;/apll&amp;gt; is identical to &amp;lt;apll&amp;gt;Z←&amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt;&amp;lt;i&amp;gt;g&amp;lt;/i&amp;gt; R&amp;lt;/apll&amp;gt;.&lt;br /&gt;
:&lt;br /&gt;
:Dyadic:  &amp;lt;apll&amp;gt;Z←L &amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt;∘&amp;lt;i&amp;gt;g&amp;lt;/i&amp;gt; R&amp;lt;/apll&amp;gt; is identical to &amp;lt;apll&amp;gt;Z←L &amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt;&amp;lt;i&amp;gt;g&amp;lt;/i&amp;gt; R&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
* The form &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt;∘b&amp;lt;/apll&amp;gt; may be used monadically only.&lt;br /&gt;
:&lt;br /&gt;
:Monadic:  &amp;lt;apll&amp;gt;Z←(&amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt;∘&amp;lt;i&amp;gt;b&amp;lt;/i&amp;gt;) R&amp;lt;/apll&amp;gt; is identical to &amp;lt;apll&amp;gt;Z←R &amp;lt;i&amp;gt;f b&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;.&lt;br /&gt;
:Note that parentheses are required around the function to avoid interpreting &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;b&amp;lt;/i&amp;gt; R&amp;lt;/apll&amp;gt; as a strand.&lt;br /&gt;
&lt;br /&gt;
* The form &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;a&amp;lt;/i&amp;gt;∘&amp;lt;i&amp;gt;g&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt; may be used monadically only, unless &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;g&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt; is any of &amp;lt;apll&amp;gt;/&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;⌿&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;/[X]&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;\&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;⍀&amp;lt;/apll&amp;gt;, or &amp;lt;apll&amp;gt;\[X]&amp;lt;/apll&amp;gt;.&lt;br /&gt;
:&lt;br /&gt;
:Monadic:  &amp;lt;apll&amp;gt;Z←&amp;lt;i&amp;gt;a&amp;lt;/i&amp;gt;∘&amp;lt;i&amp;gt;g&amp;lt;/i&amp;gt; R&amp;lt;/apll&amp;gt; is identical to &amp;lt;apll&amp;gt;Z←&amp;lt;i&amp;gt;a g&amp;lt;/i&amp;gt; R&amp;lt;/apll&amp;gt;.&lt;br /&gt;
:&lt;br /&gt;
:Dyadic:   &amp;lt;apll&amp;gt;Z←L (&amp;lt;i&amp;gt;a&amp;lt;/i&amp;gt;∘/) R&amp;lt;/apll&amp;gt; (and its related variants &amp;lt;apll&amp;gt;⌿&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;/[X]&amp;lt;/apll&amp;gt;) is called &#039;&#039;&#039;Mask&#039;&#039;&#039; (see below).&lt;br /&gt;
:&lt;br /&gt;
:Dyadic:   &amp;lt;apll&amp;gt;Z←L (&amp;lt;i&amp;gt;a&amp;lt;/i&amp;gt;∘\) R&amp;lt;/apll&amp;gt; (and its related variants &amp;lt;apll&amp;gt;⍀&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;\[X]&amp;lt;/apll&amp;gt;) is called &#039;&#039;&#039;Mesh&#039;&#039;&#039; (see below).&lt;br /&gt;
&lt;br /&gt;
* The derived function from the form &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;a&amp;lt;/i&amp;gt;∘&amp;lt;i&amp;gt;b&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt; always signals a &amp;lt;apll&amp;gt;SYNTAX ERROR&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Compose can be useful for function assignment (but enclosing parentheses are necessary).&lt;br /&gt;
&lt;br /&gt;
For example&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      p1←(1∘+¯2∘π) ⍝ 1 more than the Nth prime number&lt;br /&gt;
      p1 ⍳9&lt;br /&gt;
3 4 6 8 12 14 18 20 24&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Mask==&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; rules=&amp;quot;none&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
    &amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;apll&amp;gt;Z←L (&amp;lt;i&amp;gt;a&amp;lt;/i&amp;gt;∘/) R&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;apll&amp;gt;Z←L (&amp;lt;i&amp;gt;a&amp;lt;/i&amp;gt;∘⌿) R&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;apll&amp;gt;Z←L (&amp;lt;i&amp;gt;a&amp;lt;/i&amp;gt;∘/[X]) R&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;each returns &#039;&#039;&#039;some&#039;&#039;&#039; items &#039;&#039;&#039;in order but interleaved&#039;&#039;&#039; from the left and right arguments, possibly repeated multiple times and possibly omitting values from both arguments, combined into a single result, according to the values in &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;a&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; is an array of arbitrary rank.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;a&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt; is a scalar or vector of integers.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; is an array of arbitrary rank.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;[X]&amp;lt;/apll&amp;gt; is the optional Axis along which the function is applied &amp;amp;mdash; if this option is omitted, the function is applied along the rightmost axis.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Either or both of &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; can be scalars in which case the scalar is reshaped to the shape of the other argument.  Otherwise, the two arguments must be of the same rank and shape.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;After &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; have been scalar extended, if &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;a&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt; is a scalar, it is extended to be the same length as the common coordinate in the arguments.  Otherwise, &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;a&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt; must be a vector of the same length as &amp;lt;apll&amp;gt;(⍴L)[X]&amp;lt;/apll&amp;gt; (or, equivalently, &amp;lt;apll&amp;gt;(⍴R)[X]&amp;lt;/apll&amp;gt;).&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The function &#039;&#039;&#039;Mask&#039;&#039;&#039; selects &#039;&#039;&#039;some&#039;&#039;&#039; items from the left and right arguments depending upon the Left Operand (&amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;a&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;).  For vector arguments, if &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;a&amp;lt;/i&amp;gt;[I]&amp;lt;/apll&amp;gt; is &#039;&#039;&#039;negative&#039;&#039;&#039;, it selects the &amp;lt;apll&amp;gt;I&amp;lt;/apll&amp;gt;th item from &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt;; if it is &#039;&#039;&#039;positive&#039;&#039;&#039; it selects the &amp;lt;apll&amp;gt;I&amp;lt;/apll&amp;gt;th item from &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;; if it is &#039;&#039;&#039;zero&#039;&#039;&#039;, the &amp;lt;apll&amp;gt;I&amp;lt;/apll&amp;gt;th items from &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; are ignored.  The absolute value of &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;a&amp;lt;/i&amp;gt;[I]&amp;lt;/apll&amp;gt; indicates how many copies of the selected item are placed into the result.&lt;br /&gt;
&lt;br /&gt;
For this function, the position in &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;a&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt; (e.g., first, second, third, ...) indicates which item of the arguments (e.g., first, second, third, ...) is selected.  The sign of the integer in &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;a&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt; indicates whether it&#039;s the left argument (&#039;&#039;&#039;negative&#039;&#039;&#039;), right argument (&#039;&#039;&#039;positive&#039;&#039;&#039;), or neither (&#039;&#039;&#039;zero&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
For example,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      &#039;ABC&#039; (¯1 3 ¯2∘/) &#039;abc&#039;&lt;br /&gt;
AbbbCC&lt;br /&gt;
      (3 3⍴⎕A) (¯1 3 ¯2∘/) 3 3⍴⎕a&lt;br /&gt;
AbbbCC&lt;br /&gt;
DeeeFF&lt;br /&gt;
GhhhII&lt;br /&gt;
      (3 3⍴⎕A) (¯1 3 ¯2∘⌿) 3 3⍴⎕a&lt;br /&gt;
ABC&lt;br /&gt;
def&lt;br /&gt;
def&lt;br /&gt;
def&lt;br /&gt;
GHI&lt;br /&gt;
GHI&lt;br /&gt;
      (3 3⍴⎕A) (¯1 0 ¯2∘⌿) 3 3⍴⎕a&lt;br /&gt;
ABC&lt;br /&gt;
GHI&lt;br /&gt;
GHI&lt;br /&gt;
      (3 3⍴⎕A) (¯1 0 ¯2∘/) 3 3⍴⎕a&lt;br /&gt;
ACC&lt;br /&gt;
DFF&lt;br /&gt;
GII&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This function is essentially equivalent to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;(|LO~0)/[X] (⊂(⍋×LO,-LO)[⍋⍋×LO~0])⌷[X] L,[X] R&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;apll&amp;gt;LO&amp;lt;/apll&amp;gt; is the Left Operand &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;a&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Mesh==&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; rules=&amp;quot;none&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
    &amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;apll&amp;gt;Z←L (&amp;lt;i&amp;gt;a&amp;lt;/i&amp;gt;∘\) R&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;apll&amp;gt;Z←L (&amp;lt;i&amp;gt;a&amp;lt;/i&amp;gt;∘⍀) R&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;apll&amp;gt;Z←L (&amp;lt;i&amp;gt;a&amp;lt;/i&amp;gt;∘\[X]) R&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;each returns &#039;&#039;&#039;all&#039;&#039;&#039; items &#039;&#039;&#039;in order but interleaved&#039;&#039;&#039; from the left and right arguments, possibly repeated multiple times and possibly including the right argument&#039;s fill element, combined into a single result, according to the values in &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;a&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; is an array of arbitrary rank.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;a&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt; is a scalar or vector of integers.&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; is an array of arbitrary rank.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;[X]&amp;lt;/apll&amp;gt; is the optional Axis along which the function is applied &amp;amp;mdash; if this option is omitted, the function is applied along the rightmost axis.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;If &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; are both vectors, their lengths are related to the values in &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;a&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt; and the result &amp;lt;apll&amp;gt;Z&amp;lt;/apll&amp;gt; as follows:&lt;br /&gt;
&amp;lt;apll&amp;gt;⍴L ←→ +/&amp;lt;i&amp;gt;a&amp;lt;/i&amp;gt;&amp;amp;lt;0&lt;br /&gt;
⍴R ←→ +/&amp;lt;i&amp;gt;a&amp;lt;/i&amp;gt;&amp;amp;gt;0&lt;br /&gt;
⍴Z ←→ +/1⌈|&amp;lt;i&amp;gt;a&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If either &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; is a scalar, it is reshaped to the shape of the other argument, except for the implicit or explicit Axis dimension whose length follows the above rules for vectors.  Otherwise, the two arguments must have identical shape except for the Axis dimension whose length follows the above rules for vectors.&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The function &#039;&#039;&#039;Mesh&#039;&#039;&#039; selects &#039;&#039;&#039;all&#039;&#039;&#039; items from the left and right arguments depending upon the Left Operand (&amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;a&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;).  For vector arguments, the values in the Left Operand are organized into the &#039;&#039;&#039;negative&#039;&#039;&#039;, &#039;&#039;&#039;zero&#039;&#039;&#039;, and &#039;&#039;&#039;positive&#039;&#039;&#039; values.  As the above rules indicate, the length of the left argument is equal to the number of &#039;&#039;&#039;negative&#039;&#039;&#039; values in the Left Operand, and the length of the right argument is equal to the number of &#039;&#039;&#039;positive&#039;&#039;&#039; values.  This means that every element of the left and right arguments appears in the result.  In particular, the &amp;lt;apll&amp;gt;I&amp;lt;/apll&amp;gt;th item from the left argument appears in the result corresponding to the position of the &amp;lt;apll&amp;gt;I&amp;lt;/apll&amp;gt;th &#039;&#039;&#039;negative&#039;&#039;&#039; item in &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;a&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;, and the &amp;lt;apll&amp;gt;I&amp;lt;/apll&amp;gt;th item from the right argument appears in the result corresponding to the position of the &amp;lt;apll&amp;gt;I&amp;lt;/apll&amp;gt;th &#039;&#039;&#039;positive&#039;&#039;&#039; item in &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;a&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;.  The absolute value of the item from the Left Operand indicates how many times the corresponding item from the chosen argument is repeated in the result.  A &#039;&#039;&#039;zero&#039;&#039;&#039; in the Left Operand causes the right argument&#039;s fill element to appear in the result.&lt;br /&gt;
&lt;br /&gt;
For example, &amp;lt;apll&amp;gt;&#039;I&#039; (1 ¯1 2 ¯1 2 ¯1 2 ¯1 ∘\) &#039;MSSP&#039; ←→ &#039;IIII&#039; (1 ¯1 2 ¯1 2 ¯1 2 ¯1 ∘\) &#039;MSSP&#039;&amp;lt;/apll&amp;gt; because there are four &#039;&#039;&#039;negative&#039;&#039;&#039; items in the Left Operand.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      &#039;I&#039; (1 ¯1 2 ¯1 2 ¯1 2 ¯1 ∘\) &#039;MSSP&#039;&lt;br /&gt;
MISSISSIPPI&lt;br /&gt;
      &#039;BIB&#039;  (¯1 ¯1 1 ¯1 1 0 1 1 2 1 1 1 ∘\) &#039;LOBAGINS&#039;&lt;br /&gt;
BILBO BAGGINS&lt;br /&gt;
      (3 3⍴⎕A) (1 ¯1 2 ¯2 3 ¯3∘\[2]) 3 3⍴⎕a&lt;br /&gt;
aAbbBBcccCCC&lt;br /&gt;
dDeeEEfffFFF&lt;br /&gt;
gGhhHHiiiIII&lt;br /&gt;
      (3 3⍴⎕A) (1 ¯1 2 ¯2 3 ¯3∘⍀) 3 3⍴⎕a&lt;br /&gt;
abc&lt;br /&gt;
ABC&lt;br /&gt;
def&lt;br /&gt;
def&lt;br /&gt;
DEF&lt;br /&gt;
DEF&lt;br /&gt;
ghi&lt;br /&gt;
ghi&lt;br /&gt;
ghi&lt;br /&gt;
GHI&lt;br /&gt;
GHI&lt;br /&gt;
GHI&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
This function is essentially equivalent to&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;(|LO)\[X] (⊂⍋⍋×LO~0)⌷[X] L,[X] R&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
where &amp;lt;apll&amp;gt;LO&amp;lt;/apll&amp;gt; is the Left Operand &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;a&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;. Note that this definition is dependent upon extending the Expand function to (Signed) Integer Left Arguments as in&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      2 ¯2 1 0 2\&#039;ABC&#039;&lt;br /&gt;
AA  B CC&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Examples]]&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Category:Monadic_operators&amp;diff=3661</id>
		<title>Category:Monadic operators</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Category:Monadic_operators&amp;diff=3661"/>
		<updated>2019-10-13T22:38:31Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: new&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;System or user functions and APL operators that are &#039;&#039;[[monadic]]&#039;&#039;, are those that take one argument, one or more values to the right of the operator or function.&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Template:SFDM&amp;diff=3660</id>
		<title>Template:SFDM</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Template:SFDM&amp;diff=3660"/>
		<updated>2019-10-13T22:33:46Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: t/c&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;br/&amp;gt;Note: &amp;lt;big&amp;gt;⎕{{{1}}}&amp;lt;/big&amp;gt; is available as both a &#039;&#039;[[monadic]]&#039;&#039; and &#039;&#039;[[dyadic]]&#039;&#039; form system function, you cannot assign a value to it.&lt;br /&gt;
{{System Variables}}&lt;br /&gt;
{{Article footer|0|NO}}&amp;lt;includeonly&amp;gt;[[Category:Dyadic operators|{{{1}}}]] [[Category:Monadic operators|{{{1}}}]]&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{SF/doc}}&lt;br /&gt;
[[Category:Navigation]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Category:Dyadic_operators&amp;diff=3659</id>
		<title>Category:Dyadic operators</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Category:Dyadic_operators&amp;diff=3659"/>
		<updated>2019-10-13T22:30:44Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: t/c&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;System or user functions and APL operstors that are &#039;&#039;[[dyadic]]&#039;&#039;, are those that take two arguments, one or more to the left of the operator or function, and one or more to its right.&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Category:Dyadic_operators&amp;diff=3658</id>
		<title>Category:Dyadic operators</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Category:Dyadic_operators&amp;diff=3658"/>
		<updated>2019-10-13T22:29:53Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: new&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;System or user functions and APL operstors that are &#039;&#039;[[diadic]]&#039;&#039;, are those that take two arguments, one or more to the left of the operator or function, and one or more to its right.&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Dyadic&amp;diff=3657</id>
		<title>Dyadic</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Dyadic&amp;diff=3657"/>
		<updated>2019-10-13T22:24:00Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: explain &amp;amp; add cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A &#039;&#039;&#039;dyadic&#039;&#039;&#039; function is one that takes an argument on the left and right of the function. Here is an example of a dyadic function named &#039;&#039;&#039;deal&#039;&#039;&#039; to deal hands of cards:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;∇ k ← count deal cards;c&amp;lt;br/&amp;gt;&lt;br /&gt;
[1]&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;c ← count&amp;lt;br/&amp;gt;&lt;br /&gt;
[2]&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;k ←&#039;&#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
[3]&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;Q:&amp;lt;br/&amp;gt;&lt;br /&gt;
[4]&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;k ← k, cards ? 52&amp;lt;br/&amp;gt;&lt;br /&gt;
[5]&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;c ← c-1&amp;lt;br/&amp;gt;&lt;br /&gt;
[6]&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;→(c&amp;gt;0)/Q&amp;lt;br/&amp;gt;&lt;br /&gt;
[7]&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;k←count cards ⍴ k&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;∇&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;/apll&amp;gt;&lt;br /&gt;
So an execution of this function to deal 6 hands of 7 cards could produce the following:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;6 deal 7&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;28 &amp;amp;nbsp;1 &amp;amp;nbsp;8 24 32 47 27&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;38 46 &amp;amp;nbsp;1 43 &amp;amp;nbsp;3 40 &amp;amp;nbsp;7&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;47 28 26 &amp;amp;nbsp;7 39 &amp;amp;nbsp;2 37&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;36 12 48 46 47 31 13&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;24 52 13 25 20 30 47&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;23 25 43 21 15 52 14&amp;lt;br/&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The numbers generated would have to be related to a rank and suit to display a particular card.&lt;br /&gt;
&lt;br /&gt;
Some system functions are dyadic, in that you may present them one argument on each side of the function name, and it may return a value. The [[System Function FMT|{quad}FMT]] function provides specialized formatting when used as a dyadic function.&lt;br /&gt;
&lt;br /&gt;
== See Also==&lt;br /&gt;
* [[niladic]] (accepts no arguments)&lt;br /&gt;
* [[monadic]] (accepts one argument)&lt;br /&gt;
* [[dyadic]] (accepts two arguments)&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;hr/&amp;gt;&lt;br /&gt;
{{Article footer|0|NO}}&lt;br /&gt;
[[Category:Definitions]]&lt;br /&gt;
[[Category:Dyadic operators]]&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Monadic&amp;diff=3656</id>
		<title>Monadic</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Monadic&amp;diff=3656"/>
		<updated>2019-10-13T22:22:01Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: t/c&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A function is &#039;&#039;&#039;monadic&#039;&#039;&#039; if it accepts an argument to the right of the function.  For example:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&#039;&#039;&#039;&amp;lt;big&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;∇ z{:=}dealcard m&amp;lt;br/&amp;gt;&lt;br /&gt;
[1]&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;z←m ? 52&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;∇ &amp;lt;/big&amp;gt;&#039;&#039;&#039;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In this case, the function would return a shuffle of &#039;&#039;&#039;m&#039;&#039;&#039; cards from a deck of 52.  So a statement of&lt;br /&gt;
: shuffle {:=} dealcard 7&lt;br /&gt;
Would set &#039;&#039;&#039;shuffle&#039;&#039;&#039; to the value of an array of 7 entries in the range of 1 to 52. Or to visualize:&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;dealcard 7&amp;lt;br/&amp;gt;&lt;br /&gt;
33 1 3 4 42 40 21&amp;lt;br/&amp;gt;&amp;lt;/apll&amp;gt;&lt;br /&gt;
To make this related to a deck of cards you&#039;d have to relate the numbers to the rank and suit.&lt;br /&gt;
&lt;br /&gt;
An &#039;argument&#039; can be an array or string or whatever the function is willing to accept.&lt;br /&gt;
&lt;br /&gt;
Some System functions are monadic in that you may present them one argument, and it may return a value. The [[System Function DL|{quad}DL]] function delays execution for an amount of time indicated by the argument.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== See Also==&lt;br /&gt;
* [[niladic]] (accepts no arguments)&lt;br /&gt;
* [[monadic]] (accepts one argument)&lt;br /&gt;
* [[dyadic]] (accepts two arguments)&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;hr/&amp;gt;&lt;br /&gt;
{{Article footer|0|NO}}&lt;br /&gt;
[[Category:Definitions]]&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=System_Function_FMT&amp;diff=3655</id>
		<title>System Function FMT</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=System_Function_FMT&amp;diff=3655"/>
		<updated>2019-10-13T22:20:28Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: t/c&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Monadic Function==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; rules=&amp;quot;none&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
    &amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;apll&amp;gt;Z←⎕FMT R&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;returns a representation of &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; formatted within boxes.&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; is an arbitrary array.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;Z&amp;lt;/apll&amp;gt; is a Character MATRIX which reveals the array structure and types of the elements of &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;For example,&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      ⎕fmt ⍳3 &lt;br /&gt;
┌3────┐ &lt;br /&gt;
│1 2 3│ &lt;br /&gt;
└~────┘ &lt;br /&gt;
      ⎕fmt ⍳¨⍳3 &lt;br /&gt;
┌3──────────────────┐ &lt;br /&gt;
│ ┌1┐ ┌2──┐ ┌3────┐ │ &lt;br /&gt;
│ │1│ │1 2│ │1 2 3│ │ &lt;br /&gt;
│ └~┘ └~──┘ └~────┘ 2 &lt;br /&gt;
└∊──────────────────┘ &lt;br /&gt;
      ⎕fmt 1 1 4⍴23 &#039;abc&#039; &#039;*&#039; (2 3⍴⍳6) &lt;br /&gt;
┌┬4────────────────────┐ &lt;br /&gt;
11    ┌3──┐   ┌3─────┐ │ &lt;br /&gt;
││ 23 │abc│ * 2 1 2 3│ │ &lt;br /&gt;
││ ~~ └───┘ ¯ │ 4 5 6│ │ &lt;br /&gt;
││            └~─────┘ 2 &lt;br /&gt;
└┴∊────────────────────┘ &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;This function is implemented via the Magic Functions &amp;lt;apll&amp;gt;#MonFMT&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;#Box&amp;lt;/apll&amp;gt;.  The design is based upon ideas from Rabenhorst&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt; [http://portal.acm.org/citation.cfm?id=55664 &amp;quot;The Compact Display of Arbitrary Nested Arrays&amp;quot;] D. A. Rabenhorst (IBM), APL88 Conference Proceedings, pp 272-277, ACM.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr width=55%&amp;gt;&lt;br /&gt;
APL code for Magic Function #BoxFMT(July 2015):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
   2 ⎕CR &#039;#BoxFMT&#039;&lt;br /&gt;
Z←Z #BoxFMT R;RD;LD;D                        &lt;br /&gt;
LD←⍕(0≠⍴⍴R)/¯1↑⍴R                            &lt;br /&gt;
RD←⍕⍪¯1↓⍴R                                   &lt;br /&gt;
RD←(+/RD=&#039; &#039;)⌽RD                             &lt;br /&gt;
D←¯2+⍴⍴Z                                     &lt;br /&gt;
:if D&amp;gt;0                                      &lt;br /&gt;
:while 2&amp;lt;⍴⍴Z                                 &lt;br /&gt;
  Z←,[¯3 ¯2] Z,[¯2]&#039; &#039;                       &lt;br /&gt;
:endwhile                                    &lt;br /&gt;
Z←(-D)↓[0]Z                                  &lt;br /&gt;
:endif                                       &lt;br /&gt;
Z←(¯2↑1,⍴Z)⍴Z ⋄ Z←((⍴Z)⌈(¯1↑⍴RD),⍴LD)↑Z      &lt;br /&gt;
:if 1≥⍴⍴R                                    &lt;br /&gt;
  RD←((1↑⍴Z),1)⍴&#039;│&#039;                          &lt;br /&gt;
:else                                        &lt;br /&gt;
  RD←⍉(1↑⍴Z)↑[1] RD ⋄ RD[(,RD=&#039; &#039;)/,⍳⍴RD]←&#039;│&#039;&lt;br /&gt;
:endif                                       &lt;br /&gt;
RD←&#039;┬&#039;⍪RD⍪&#039;┴&#039; ⋄ RD[0 ¯1;0]←&#039;┌└&#039;              &lt;br /&gt;
Z←Z,&#039;│&#039;                                      &lt;br /&gt;
D←≡R                                         &lt;br /&gt;
:if 1&amp;lt;D                                      &lt;br /&gt;
  D←⍕D                                       &lt;br /&gt;
  Z[⍳-⍴D;¯1]←⌽D                              &lt;br /&gt;
:endif                                       &lt;br /&gt;
Z←&#039;─&#039;⍪Z⍪&#039;─&#039;                                  &lt;br /&gt;
Z[0 ¯1;¯1]←&#039;┐┘&#039;                              &lt;br /&gt;
Z[0;⍳⍴LD]←LD                                 &lt;br /&gt;
Z[¯1;0]←Type                                 &lt;br /&gt;
Z←RD,Z   &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
For a list of &amp;lt;u&amp;gt;all&amp;lt;/u&amp;gt; magic functions implemented in NARS, see [[System_Function_NL|⎕NL 23 24]]&lt;br /&gt;
&lt;br /&gt;
==Dyadic Function==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; rules=&amp;quot;none&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&lt;br /&gt;
    &amp;lt;table border=&amp;quot;0&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;tr&amp;gt;&lt;br /&gt;
      &amp;lt;td valign=&amp;quot;top&amp;quot;&amp;gt;&amp;lt;apll&amp;gt;Z←L ⎕FMT R&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
      &amp;lt;td&amp;gt;returns the formatted representation of &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; as controlled by &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt;.&amp;lt;/td&amp;gt;&lt;br /&gt;
    &amp;lt;/tr&amp;gt;&lt;br /&gt;
    &amp;lt;/table&amp;gt;&lt;br /&gt;
  &amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; is a simple array or a nested vector of simple arrays &amp;amp;mdash; this is the array to be formatted.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; is a character scalar or vector &amp;amp;mdash; this is the format specification.&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;big&amp;gt;&#039;&#039;&#039;Quad FMT&#039;&#039;&#039; sample &#039;&#039;dyadic&#039;&#039; usage:&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;big&amp;gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
      &#039;CI 14&#039; ⎕FMT ⎕WA  ⍝ C=use commas(&amp;quot;,&amp;quot;) modifier; I=Integer format; 14=reserve 14 spaces.  ⎕WA=free workspace area.&lt;br /&gt;
50,825,084,928           ⍝ Result shown by APL, commas inserted. Easily readable, over 50 gigabytes of free work area.&lt;br /&gt;
      &#039;CI 13&#039; ⎕FMT ⎕WA  ⍝ Same as 1st example, but too FEW spaces allowed for(only 13); hence, APL returns all asterisks(*).&lt;br /&gt;
*************&lt;br /&gt;
      &#039;CF 14.2&#039; ⎕FMT 44888.769  ⍝ C=Commas modifier, F=Floating point number format; 14 reserved spaces; 2 decimals. .769 to .77&lt;br /&gt;
     44,888.77&lt;br /&gt;
&lt;br /&gt;
      &#039;G&amp;lt;99/99/9999&amp;gt;&#039; ⎕FMT 03042015  ⍝ G&amp;lt;...&amp;gt;=General picture formatting(like Cobol Gen picture fmt), in this case formatting for a date!&lt;br /&gt;
03/04/2015&lt;br /&gt;
      ⍴(&#039;G&amp;lt;99/99/9999&amp;gt;&#039; ⎕FMT 03042015) ⍝ Note that OUTPUT from ⎕FMT is a Char/string MATRIX (NOT a vector), in this case a ONE ROW matrix.&lt;br /&gt;
1 10&lt;br /&gt;
&lt;br /&gt;
      &#039;G&amp;lt;(999) 999-9999&amp;gt;&#039; ⎕FMT 8005126200 8004443300  ⍝ Formatting for telephone numbers.  Output = 2-row character matrix.&lt;br /&gt;
(800) 512-6200&lt;br /&gt;
(800) 444-3300&lt;br /&gt;
&amp;lt;/pre&amp;gt;&amp;lt;/big&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Based upon the original STSC implementation in the early 1970s, this function performs a wide variety of formatting tasks such as Integer, Decimal, Exponential, Alphabetic, and Picture formatting.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The left argument consists of zero or more format phrases each separated by a comma and zero or more spaces.  A format phrase consists of an optional Repetition factor, zero or more Qualifiers, zero or more Decorators, a Phrase Type, and possibly width or other numeric information depending upon the Phrase Type.&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;The list of Phrase Types consists of&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; rules = &amp;quot;none&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;A&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;w&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Character format&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;E&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;w.s&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Exponential format&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;F&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;w.d&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Decimal format&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;G&amp;lt;/apll&amp;gt;&amp;amp;lt;picture&amp;amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Picture format&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;I&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;w&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Integer format&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;w.d&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Rational format&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;T&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Rightmost positioning&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;T&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;p&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Absolute positioning&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;X&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;w&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Relative positioning where &amp;lt;i&amp;gt;w&amp;lt;/i&amp;gt; may be negative as in &amp;lt;apll&amp;gt;X¯3&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;X-3&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The list of Qualifiers consists of&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; rules = &amp;quot;none&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;B&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Blank if zero&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;C&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Comma (thousands separator) insertion&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;K&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;n&amp;lt;/i&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Scaling by 10&amp;lt;sup&amp;gt;n&amp;lt;/sup&amp;gt; where &amp;lt;i&amp;gt;n&amp;lt;/i&amp;gt; may be negative as in &amp;lt;apll&amp;gt;K¯3&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;K-3&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Left justification&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;Z&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Zero fill&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The list of Decorators consists of a Decorator Type followed by &amp;lt;i&amp;gt;text&amp;lt;/i&amp;gt;, where the &amp;lt;i&amp;gt;text&amp;lt;/i&amp;gt; is surrounded by delimiters which come in pairs such as&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;&#039;...&#039;&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;quot;...&amp;quot;&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;⎕...⎕&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;⍞...⍞&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;¨...¨&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;&amp;amp;lt;...&amp;amp;gt;&amp;lt;/apll&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;⊂...⊃&amp;lt;/apll&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The list of Decorators consists of&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; rules = &amp;quot;none&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;M&amp;lt;/apll&amp;gt;&amp;amp;lt;&amp;lt;i&amp;gt;text&amp;lt;/i&amp;gt;&amp;amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Negative left decoration&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;N&amp;lt;/apll&amp;gt;&amp;amp;lt;&amp;lt;i&amp;gt;text&amp;lt;/i&amp;gt;&amp;amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Negative right decoration&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;O&amp;lt;/apll&amp;gt;&amp;amp;lt;&amp;lt;i&amp;gt;text&amp;lt;/i&amp;gt;&amp;amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Zero substitution&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;O&amp;lt;/apll&amp;gt;n&amp;amp;lt;&amp;lt;i&amp;gt;text&amp;lt;/i&amp;gt;&amp;amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Specific value substitution where &amp;lt;i&amp;gt;n&amp;lt;/i&amp;gt; may be negative as in &amp;lt;apll&amp;gt;O¯2&amp;amp;lt;&amp;lt;i&amp;gt;text&amp;lt;/i&amp;gt;&amp;amp;gt;&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;O-2&amp;amp;lt;&amp;lt;i&amp;gt;text&amp;lt;/i&amp;gt;&amp;amp;gt;&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;P&amp;lt;/apll&amp;gt;&amp;amp;lt;&amp;lt;i&amp;gt;text&amp;lt;/i&amp;gt;&amp;amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Positive and zero left decoration&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;Q&amp;lt;/apll&amp;gt;&amp;amp;lt;&amp;lt;i&amp;gt;text&amp;lt;/i&amp;gt;&amp;amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Positive and zero right decoration&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;&amp;amp;lt;&amp;lt;i&amp;gt;text&amp;lt;/i&amp;gt;&amp;amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Background fill&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;&amp;lt;apll&amp;gt;S&amp;lt;/apll&amp;gt;&amp;amp;lt;&amp;lt;i&amp;gt;text&amp;lt;/i&amp;gt;&amp;amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Symbol substitution&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Within a Format Phrase, Qualifiers and Decorators may appear in any order, and may be separated from each other and the Phrase Type by zero or more spaces.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Character Format Phrase===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Form:&amp;lt;/b&amp;gt; &amp;lt;i&amp;gt;rqd&amp;lt;/i&amp;gt;&amp;lt;apll&amp;gt;A&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;w&amp;lt;/i&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;where &amp;lt;i&amp;gt;r&amp;lt;/i&amp;gt; is an optional repetition factor, &amp;lt;i&amp;gt;q&amp;lt;/i&amp;gt; is an optional qualifier (&amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; only is allowed), &amp;lt;i&amp;gt;d&amp;lt;/i&amp;gt; is an optional decorator (&amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;S&amp;lt;/apll&amp;gt; are allowed), and &amp;lt;i&amp;gt;w&amp;lt;/i&amp;gt; is the field width in which each character is placed, right- or left-justified as per the absence/presence of the &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt; qualifier.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Exponential Format Phrase===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Form:&amp;lt;/b&amp;gt; &amp;lt;i&amp;gt;rqd&amp;lt;/i&amp;gt;&amp;lt;apll&amp;gt;E&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;w&amp;lt;/i&amp;gt;.&amp;lt;i&amp;gt;s&amp;lt;/i&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;where &amp;lt;i&amp;gt;r&amp;lt;/i&amp;gt; is an optional repetition factor, &amp;lt;i&amp;gt;q&amp;lt;/i&amp;gt; is an optional qualifier (&amp;lt;apll&amp;gt;B&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;K&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt;, and &amp;lt;apll&amp;gt;Z&amp;lt;/apll&amp;gt; are allowed), &amp;lt;i&amp;gt;d&amp;lt;/i&amp;gt; is an optional decorator (&amp;lt;apll&amp;gt;M&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;N&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;O&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;P&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;Q&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;, and &amp;lt;apll&amp;gt;S&amp;lt;/apll&amp;gt; are allowed), &amp;lt;i&amp;gt;w&amp;lt;/i&amp;gt; is the field width, and &amp;lt;i&amp;gt;s&amp;lt;/i&amp;gt; is the number of significant digits displayed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Decimal Format Phrase===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Form:&amp;lt;/b&amp;gt; &amp;lt;i&amp;gt;rqd&amp;lt;/i&amp;gt;&amp;lt;apll&amp;gt;F&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;w&amp;lt;/i&amp;gt;.&amp;lt;i&amp;gt;d&amp;lt;/i&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;where &amp;lt;i&amp;gt;r&amp;lt;/i&amp;gt; is an optional repetition factor, &amp;lt;i&amp;gt;q&amp;lt;/i&amp;gt; is an optional qualifier (&amp;lt;apll&amp;gt;B&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;C&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;K&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt;, and &amp;lt;apll&amp;gt;Z&amp;lt;/apll&amp;gt; are allowed), &amp;lt;i&amp;gt;d&amp;lt;/i&amp;gt; is an optional decorator (&amp;lt;apll&amp;gt;M&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;N&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;O&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;P&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;Q&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;, and &amp;lt;apll&amp;gt;S&amp;lt;/apll&amp;gt; are allowed), &amp;lt;i&amp;gt;w&amp;lt;/i&amp;gt; is the field width, and &amp;lt;i&amp;gt;d&amp;lt;/i&amp;gt; is the number of decimal digits displayed.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Picture Format Phrase===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Form:&amp;lt;/b&amp;gt; &amp;lt;i&amp;gt;rqd&amp;lt;/i&amp;gt;&amp;lt;apll&amp;gt;G&amp;lt;/apll&amp;gt;&amp;amp;lt;&amp;lt;i&amp;gt;text&amp;lt;/i&amp;gt;&amp;amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;where &amp;lt;i&amp;gt;r&amp;lt;/i&amp;gt; is an optional repetition factor, &amp;lt;i&amp;gt;q&amp;lt;/i&amp;gt; is an optional qualifier (&amp;lt;apll&amp;gt;B&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;K&amp;lt;/apll&amp;gt; are allowed), &amp;lt;i&amp;gt;d&amp;lt;/i&amp;gt; is an optional decorator (&amp;lt;apll&amp;gt;M&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;O&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;P&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;, and &amp;lt;apll&amp;gt;S&amp;lt;/apll&amp;gt; are allowed), and &amp;lt;i&amp;gt;text&amp;lt;/i&amp;gt; is the pattern for the picture format.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Integer Format Phrase===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Form:&amp;lt;/b&amp;gt; &amp;lt;i&amp;gt;rqd&amp;lt;/i&amp;gt;&amp;lt;apll&amp;gt;I&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;w&amp;lt;/i&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;where &amp;lt;i&amp;gt;r&amp;lt;/i&amp;gt; is an optional repetition factor, &amp;lt;i&amp;gt;q&amp;lt;/i&amp;gt; is an optional qualifier (&amp;lt;apll&amp;gt;B&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;C&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;K&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt;, and &amp;lt;apll&amp;gt;Z&amp;lt;/apll&amp;gt; are allowed), &amp;lt;i&amp;gt;d&amp;lt;/i&amp;gt; is an optional decorator (&amp;lt;apll&amp;gt;M&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;N&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;O&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;P&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;Q&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;, and &amp;lt;apll&amp;gt;S&amp;lt;/apll&amp;gt; are allowed), and &amp;lt;i&amp;gt;w&amp;lt;/i&amp;gt; is the field width.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Rational Format Phrase===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Form:&amp;lt;/b&amp;gt; &amp;lt;i&amp;gt;rqd&amp;lt;/i&amp;gt;&amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;w&amp;lt;/i&amp;gt;.&amp;lt;i&amp;gt;d&amp;lt;/i&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;where &amp;lt;i&amp;gt;r&amp;lt;/i&amp;gt; is an optional repetition factor, &amp;lt;i&amp;gt;q&amp;lt;/i&amp;gt; is an optional qualifier (&amp;lt;apll&amp;gt;B&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;C&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;K&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt;, and &amp;lt;apll&amp;gt;Z&amp;lt;/apll&amp;gt; are allowed), &amp;lt;i&amp;gt;d&amp;lt;/i&amp;gt; is an optional decorator (&amp;lt;apll&amp;gt;M&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;N&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;O&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;P&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;Q&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;, and &amp;lt;apll&amp;gt;S&amp;lt;/apll&amp;gt; are allowed), &amp;lt;i&amp;gt;w&amp;lt;/i&amp;gt; is the field width, and &amp;lt;i&amp;gt;d&amp;lt;/i&amp;gt; is the number of digits displayed in the denominator.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Absolute Positioning Phrase===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Form:&amp;lt;/b&amp;gt; &amp;lt;apll&amp;gt;T&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;T&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;p&amp;lt;/i&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;where &amp;lt;i&amp;gt;p&amp;lt;/i&amp;gt; is the absolute (origin-1) position in the line.  If &amp;lt;i&amp;gt;p&amp;lt;/i&amp;gt; is zero or is omitted, the next character is inserted at the rightmost position of the line.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Relative Positioning Phrase===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;b&amp;gt;Form:&amp;lt;/b&amp;gt; &amp;lt;i&amp;gt;r&amp;lt;/i&amp;gt;&amp;lt;apll&amp;gt;X&amp;lt;/apll&amp;gt;&amp;lt;i&amp;gt;w&amp;lt;/i&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;where &amp;lt;i&amp;gt;r&amp;lt;/i&amp;gt; is an optional repetition factor, &amp;lt;i&amp;gt;w&amp;lt;/i&amp;gt; is the (signed) field width, that is the number of spaces to move to the left (&amp;lt;i&amp;gt;w&amp;lt;/i&amp;gt; &amp;amp;lt; 0) or right (&amp;lt;i&amp;gt;w&amp;lt;/i&amp;gt; &amp;amp;gt; 0).&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Symbol Substitution===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;All but the Positioning Phrases allow alternate symbols to be used in place of certain standard symbols.  For example, the thousands separator used by the &amp;lt;apll&amp;gt;C&amp;lt;/apll&amp;gt; qualifier may be substituted with a dot using &amp;lt;apll&amp;gt;S&amp;amp;lt;,.&amp;amp;gt;&amp;lt;/apll&amp;gt;, the decimal point used in numeric format phrases may be substituted with a comma using &amp;lt;apll&amp;gt;S&amp;amp;lt;.,&amp;amp;gt;&amp;lt;/apll&amp;gt;, and both may be substituted at the same time using &amp;lt;apll&amp;gt;S&amp;amp;lt;,..,&amp;amp;gt;&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;S&amp;amp;lt;.,,.&amp;amp;gt;&amp;lt;/apll&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;In general, the text portion of Symbol Substitution consists of pairs of characters.  The first character in each pair consists of a standard symbol which identifies the substitution class and is its default value.  The second character in each pair is the (new) symbol to be used when the corresponding standard symbol is called for.  Each standard symbol may appear as the first character in a pair at most once in each &amp;lt;apll&amp;gt;S&amp;lt;/apll&amp;gt; Decorator.  The order of the pairs is unimportant.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The list of substitution classes along with their (standard symbols) and the Format Phrases/Qualifiers in which they are allowed is as follows:&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;table border=&amp;quot;1&amp;quot; cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;0&amp;quot; rules = &amp;quot;none&amp;quot; summary=&amp;quot;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Overflow (&amp;lt;apll&amp;gt;*&amp;lt;/apll&amp;gt;)&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Format Phrases:  &amp;lt;apll&amp;gt;A&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;E&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;F&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;G&amp;lt;/apll&amp;gt;, and &amp;lt;apll&amp;gt;I&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Decimal Separator (&amp;lt;apll&amp;gt;.&amp;lt;/apll&amp;gt;)&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Format Phrases:  &amp;lt;apll&amp;gt;E&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;F&amp;lt;/apll&amp;gt;, and &amp;lt;apll&amp;gt;I&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Thousands Separator (&amp;lt;apll&amp;gt;,&amp;lt;/apll&amp;gt;)&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Qualifier:  &amp;lt;apll&amp;gt;C&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Exponent Separator (&amp;lt;apll&amp;gt;E&amp;lt;/apll&amp;gt;)&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Format Phrase:  &amp;lt;apll&amp;gt;E&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Zero Fill (&amp;lt;apll&amp;gt;0&amp;lt;/apll&amp;gt;)&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Qualifier:  &amp;lt;apll&amp;gt;Z&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Precision Loss Fill (&amp;lt;apll&amp;gt;_&amp;lt;/apll&amp;gt;)&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Format Phrases:  &amp;lt;apll&amp;gt;E&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;F&amp;lt;/apll&amp;gt;, and &amp;lt;apll&amp;gt;I&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Z Character (&amp;lt;apll&amp;gt;Z&amp;lt;/apll&amp;gt;)&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Format Phrase:  &amp;lt;apll&amp;gt;G&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;9 Character (&amp;lt;apll&amp;gt;9&amp;lt;/apll&amp;gt;)&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Format Phrase:  &amp;lt;apll&amp;gt;G&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Rational Separator (&amp;lt;apll&amp;gt;r&amp;lt;/apll&amp;gt;)&amp;lt;/td&amp;gt;&lt;br /&gt;
  &amp;lt;td&amp;gt;Format Phrase:  &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Specific Value Substitution===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The &amp;lt;apll&amp;gt;O&amp;lt;/apll&amp;gt; decorator may be used to substitute arbitrary text for any given value.  Originally, it was designed as a generalization of the &amp;lt;apll&amp;gt;B&amp;lt;/apll&amp;gt; Qualifier to allow arbitrary text to appear in place of a zero, as in &amp;lt;apll&amp;gt;O&amp;amp;lt;Zilch&amp;amp;gt;I8&amp;lt;/apll&amp;gt;.  Later, it was generalized even farther to substitute values other than zero, as in &amp;lt;apll&amp;gt;O2&amp;amp;lt;Twice&amp;amp;gt;I6&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;O3.141592653589793&amp;lt;π&amp;gt;F10.2&amp;lt;/apll&amp;gt;.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;The comparison of incoming data with the specific values is done using Comparison Tolerance.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;Unlike all other Decorators, this one may appear multiple times within a single Format Phrase.&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{SFDM|FMT}}&lt;br /&gt;
{{Article footer|0|NO}}&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Template:SFM&amp;diff=3654</id>
		<title>Template:SFM</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Template:SFM&amp;diff=3654"/>
		<updated>2019-10-13T22:17:33Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;br/&amp;gt;Note: &amp;lt;big&amp;gt;&#039;&#039;&#039;{quad}{{{1}}}&#039;&#039;&#039;&amp;lt;/big&amp;gt; is a &#039;&#039;[[monadic]]&#039;&#039; form system function, you cannot assign a value to it.&lt;br /&gt;
{{System Variables}}&amp;lt;hr/&amp;gt;&lt;br /&gt;
{{Article footer|0|NO}}&amp;lt;includeonly&amp;gt;&lt;br /&gt;
[[Category:Monadic operators]]&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{SF/doc}}&lt;br /&gt;
[[Category:Navigation]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Template:SFDM&amp;diff=3653</id>
		<title>Template:SFDM</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Template:SFDM&amp;diff=3653"/>
		<updated>2019-10-13T22:15:03Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: explain &amp;amp; add cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;br/&amp;gt;Note: &amp;lt;big&amp;gt;⎕{{{1}}}&amp;lt;/big&amp;gt; is available as both a &#039;&#039;[[monadic]]&#039;&#039; and &#039;&#039;[[dyadic]]&#039;&#039; form system function, you cannot assign a value to it.&lt;br /&gt;
{{System Variables}}&lt;br /&gt;
{{Article footer|0|NO}}&amp;lt;includeonly&amp;gt;[[Category:Dyadic operators]] [[Category:Monadic operators]]&amp;lt;/includeonly&amp;gt;&lt;br /&gt;
&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{SF/doc}}&lt;br /&gt;
[[Category:Navigation]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Template:SFD&amp;diff=3652</id>
		<title>Template:SFD</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Template:SFD&amp;diff=3652"/>
		<updated>2019-10-13T22:10:37Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: explain &amp;amp; add cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;br/&amp;gt;Note: {quad}{{{1}}} is a &#039;&#039;[[dyadic]]&#039;&#039; form system function, you cannot assign a value to it.&lt;br /&gt;
{{System Variables}}&amp;lt;hr/&amp;gt;&lt;br /&gt;
{{Article footer|0|NO}}&amp;lt;includeonly&amp;gt;[[Category:Dyadic p[erators]]&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{SF/doc}}&lt;br /&gt;
[[Category:Navigation]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Template:System_Variables&amp;diff=3651</id>
		<title>Template:System Variables</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Template:System_Variables&amp;diff=3651"/>
		<updated>2019-10-13T22:05:05Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: t/c&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;font-size: 95%;&amp;quot; width=&amp;quot;{{{Width|{{{width|80%}}}}}}&amp;quot; align=&amp;quot;center&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;10&amp;quot; |[[System Variables]] (A value may be assigned to these except for &amp;lt;apll&amp;gt;⎕DM&amp;lt;/apll&amp;gt;)&lt;br /&gt;
|-&lt;br /&gt;
{{SSV|ALX }}&lt;br /&gt;
{{SSV|CT  }}&lt;br /&gt;
{{SSV|DM  }}&lt;br /&gt;
{{SSV|DT  }}&lt;br /&gt;
{{SSV|ELX }}&lt;br /&gt;
{{SSV|FC  }}&lt;br /&gt;
{{SSV|FEATURE}}&lt;br /&gt;
{{SSV|FPC}}&lt;br /&gt;
{{SSV|IC }}&lt;br /&gt;
{{SSV|IO }}&lt;br /&gt;
|-&lt;br /&gt;
{{SSV|LR  }}&lt;br /&gt;
{{SSV|LX }}&lt;br /&gt;
{{SSV|PP }}&lt;br /&gt;
{{SSV|PR }}&lt;br /&gt;
{{SSV|PW }}&lt;br /&gt;
{{SSV|RL }}&lt;br /&gt;
{{SSV|SA }}&lt;br /&gt;
{{SSV|WSID}}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;10&amp;quot; | [[Niladic]] [[System Functions]]  (a value cannot be assigned to these)&lt;br /&gt;
|-&lt;br /&gt;
{{SSF|A  }}&lt;br /&gt;
{{SSF|AV }}&lt;br /&gt;
{{SSF|EM }}&lt;br /&gt;
{{SSF|ET }}&lt;br /&gt;
{{SSF|LC  }}&lt;br /&gt;
{{SSF|NNAMES}}&lt;br /&gt;
{{SSF|NNUMS }}&lt;br /&gt;
{{SSF|SI }}&lt;br /&gt;
{{SSF|SYSID }}&lt;br /&gt;
{{SSF|SYSVER}}&lt;br /&gt;
|-&lt;br /&gt;
{{SSF|T}}&lt;br /&gt;
{{SSF|TC    }}&lt;br /&gt;
{{SSF|TCBEL }}&lt;br /&gt;
{{SSF|TCBS  }}&lt;br /&gt;
{{SSF|TCESC }}&lt;br /&gt;
{{SSF|TCFF  }}&lt;br /&gt;
{{SSF|TCHT  }}&lt;br /&gt;
{{SSF|TCLF  }}&lt;br /&gt;
{{SSF|TCNL  }}&lt;br /&gt;
{{SSF|TCNUL }}&lt;br /&gt;
|-&lt;br /&gt;
{{SSF|TS    }}&lt;br /&gt;
{{SSF|WA    }}&lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;10&amp;quot; |   [[Monadic]] or [[dyadic]] system functions (a value cannot be assigned to these)&lt;br /&gt;
|-&lt;br /&gt;
{{SSF|AT      | Attributes}}&lt;br /&gt;
{{SSF|CR      | Canonical representation}}&lt;br /&gt;
{{SSF|DC      | Data Conversion}}&lt;br /&gt;
{{SSF|DFT     | Discrete Fourier Transform}}&lt;br /&gt;
{{SSF|DL      | Delay}}&lt;br /&gt;
{{SSF|DR      | Data representation}}&lt;br /&gt;
{{SSF|EA      | Execute alternate}}&lt;br /&gt;
{{SSF|EC      | Execute controlled}}&lt;br /&gt;
{{SSF|ERROR   | Signal error}}&lt;br /&gt;
{{SSF|ES      | Event simulate}}&lt;br /&gt;
|-&lt;br /&gt;
{{SSF|EX      | Expunge names}}&lt;br /&gt;
{{SSF|FMT     | Format}}&lt;br /&gt;
{{SSF|FX      | Function fix}}&lt;br /&gt;
{{SSF|MF      | Monitor function}}&lt;br /&gt;
{{SSF|NAPPEND | Append data to an open native file}}&lt;br /&gt;
{{SSF|NC      | Name classification}}&lt;br /&gt;
{{SSF|NCREATE | Create and open a native file}}&lt;br /&gt;
{{SSF|NERASE  | Erase an open native file}}&lt;br /&gt;
{{SSF|NINFO   | Native file information}}&lt;br /&gt;
{{SSF|NL      | Name list}}&lt;br /&gt;
|-&lt;br /&gt;
{{SSF|NLOCK   | Lock/unlock an open native file}}&lt;br /&gt;
{{SSF|NREAD   | Read data from an open native file}}&lt;br /&gt;
{{SSF|NRENAME | Rename an open native file}}&lt;br /&gt;
{{SSF|NREPLACE| Replace data in an open native file}}&lt;br /&gt;
{{SSF|NRESIZE | Resize an open native file}}&lt;br /&gt;
{{SSF|NSIZE   | Get the size of an open native file}}&lt;br /&gt;
{{SSF|NTIE    | Open a native file}}&lt;br /&gt;
{{SSF|NUNTIE  | Close a native file}}&lt;br /&gt;
{{SSF|STOP    | Stop execution of a user-defined function/operator or Magic Function}}&lt;br /&gt;
{{SSF|TF      | Transfer form}}&lt;br /&gt;
|-&lt;br /&gt;
{{SSF|TRACE   | Trace execution of a user-defined function/operator or Magic Function}}&lt;br /&gt;
{{SSF|UCS     | Universal character set}}&lt;br /&gt;
{{SSF|VR      | Vector representation of a function}}                  &lt;br /&gt;
|-&lt;br /&gt;
! colspan=&amp;quot;10&amp;quot; |Note that quad functions and variables (except for the &amp;lt;apll&amp;gt;⎕A&amp;lt;/apll&amp;gt; family of functions) are case insensitive&lt;br /&gt;
|}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Navigation]]&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Template:SF/doc&amp;diff=3650</id>
		<title>Template:SF/doc</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Template:SF/doc&amp;diff=3650"/>
		<updated>2019-10-13T21:58:20Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: t/c&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following message is not shown when this template is used, only when viewed directly.&lt;br /&gt;
 &lt;br /&gt;
This template is used for System Functions that are used thus the name. It is placed at the bottom of appropriate pages.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Available System Function templates:&#039;&#039;&#039;&lt;br /&gt;
* [[Template:SFD|&amp;lt;nowiki&amp;gt;{{SFD}}&amp;lt;/nowiki&amp;gt;]]: Dyadic only&lt;br /&gt;
* [[Template:SFDM|&amp;lt;nowiki&amp;gt;{{SFDM}}&amp;lt;/nowiki&amp;gt;]]: &#039;&#039;Both&#039;&#039; Dyadic and Monadic&lt;br /&gt;
* [[Template:SFM|&amp;lt;nowiki&amp;gt;{{SFM}}&amp;lt;/nowiki&amp;gt;]]: Monadic only&lt;br /&gt;
* [[Template:SFN|&amp;lt;nowiki&amp;gt;{{SFN}}&amp;lt;/nowiki&amp;gt;]]: Niladic only&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:Navigation assistance]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Template:SFN&amp;diff=3649</id>
		<title>Template:SFN</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Template:SFN&amp;diff=3649"/>
		<updated>2019-10-13T21:55:50Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: t/c&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;br/&amp;gt;Note: &amp;lt;apll&amp;gt;⎕&amp;lt;/apll&amp;gt;{{{1}}} is a &#039;&#039;[[niladic]]&#039;&#039; form system function, you cannot assign a value to it.&amp;lt;br/&amp;gt;&lt;br /&gt;
{{System Variables}}&amp;lt;hr/&amp;gt;&lt;br /&gt;
{{Article footer|0|NO}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{SF/doc}}&lt;br /&gt;
[[Category:Navigation]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Template:SFN&amp;diff=3648</id>
		<title>Template:SFN</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Template:SFN&amp;diff=3648"/>
		<updated>2019-10-13T21:53:13Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: t/c&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;br/&amp;gt;Note: &amp;lt;apll&amp;gt;⎕&amp;lt;/apll&amp;gt;{{{1}}} is a &#039;&#039;[[niladic]]&#039;&#039; form system function, you cannot assign a value to it.&amp;lt;br/&amp;gt;&lt;br /&gt;
{{System Variables}}&amp;lt;hr/&amp;gt;&lt;br /&gt;
{{Article footer|0|NO}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Navigation]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Template:SFN&amp;diff=3647</id>
		<title>Template:SFN</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Template:SFN&amp;diff=3647"/>
		<updated>2019-10-13T21:52:41Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: t/c&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;br/&amp;gt;Note: &amp;lt;apll&amp;gt;⎕&amp;lt;/apll&amp;gt;{{{1}}} is a &#039;&#039;[[niladic]]&#039;&#039; form system function, you cannot assign a value to it.&amp;lt;br/&amp;gt;&lt;br /&gt;
{{System Variables}}&amp;lt;hr/&amp;gt;&lt;br /&gt;
{{Article footer|0|NO}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
[[Category:Navigation]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Template:SSF&amp;diff=3646</id>
		<title>Template:SSF</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Template:SSF&amp;diff=3646"/>
		<updated>2019-10-13T21:48:58Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: explain &amp;amp; add cat&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
|| [[System Function {{{1}}}|&amp;lt;apll&amp;gt;⎕&amp;lt;/apll&amp;gt;{{{1}}}]]&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{SF/doc}}&lt;br /&gt;
[[Category:Navigation assistance]]&lt;br /&gt;
&lt;br /&gt;
This template is not intemded to be viewed directly. It is used to assist in building table rows.&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Template:SF&amp;diff=3645</id>
		<title>Template:SF</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Template:SF&amp;diff=3645"/>
		<updated>2019-10-13T21:45:28Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| [[System Function {{{1}}}|⎕{{{1}}}]] &lt;br /&gt;
|| {{{2}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{SF/doc}}&lt;br /&gt;
[[Category:Navigation assistance]]&lt;br /&gt;
&lt;br /&gt;
This template is not intemded to be viewed directly. It is used to assist in building table rows.&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Template:SF&amp;diff=3644</id>
		<title>Template:SF</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Template:SF&amp;diff=3644"/>
		<updated>2019-10-13T21:43:16Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: t/c&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;includeonly&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|| [[System Function {{{1}}}|⎕{{{1}}}]] &lt;br /&gt;
|| {{{2}}}&amp;lt;/includeonly&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{SF/doc}}&lt;br /&gt;
[[Category:Navigation assistance]]&lt;br /&gt;
&lt;br /&gt;
This template is not intemded to be viewed directly.&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Template:SFM&amp;diff=3643</id>
		<title>Template:SFM</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Template:SFM&amp;diff=3643"/>
		<updated>2019-10-13T21:38:07Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;br/&amp;gt;Note: &amp;lt;big&amp;gt;&#039;&#039;&#039;{quad}{{{1}}}&#039;&#039;&#039;&amp;lt;/big&amp;gt; is a &#039;&#039;[[monadic]]&#039;&#039; form system function, you cannot assign a value to it.&lt;br /&gt;
{{System Variables}}&amp;lt;hr/&amp;gt;&lt;br /&gt;
{{Article footer|0|NO}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{SF/doc}}&lt;br /&gt;
[[Category:Navigation]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Template:SFD&amp;diff=3642</id>
		<title>Template:SFD</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Template:SFD&amp;diff=3642"/>
		<updated>2019-10-13T21:36:33Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;br/&amp;gt;Note: {quad}{{{1}}} is a &#039;&#039;[[dyadic]]&#039;&#039; form system function, you cannot assign a value to it.&lt;br /&gt;
{{System Variables}}&amp;lt;hr/&amp;gt;&lt;br /&gt;
{{Article footer|0|NO}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{SF/doc}}&lt;br /&gt;
[[Category:Navigation]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Template:SF/doc&amp;diff=3641</id>
		<title>Template:SF/doc</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Template:SF/doc&amp;diff=3641"/>
		<updated>2019-10-13T21:35:31Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: t/c&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following message is not shown when this template is used, only when viewed directly.&lt;br /&gt;
 &lt;br /&gt;
This template is used for System Functions that are used thus the name. It is placed at the bottom of appropriate pages.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Available System Function templates:&#039;&#039;&#039;&lt;br /&gt;
* [[Template:SFD|&amp;lt;nowiki&amp;gt;{{SFD}}&amp;lt;/nowiki&amp;gt;]]: Dyadic only&lt;br /&gt;
* [[Template:SFDM|&amp;lt;nowiki&amp;gt;{{SFDM}}&amp;lt;/nowiki&amp;gt;]]: &#039;&#039;Both&#039;&#039; Dyadic and Monadic&lt;br /&gt;
* [[Template:SFM|&amp;lt;nowiki&amp;gt;{{SFM}}&amp;lt;/nowiki&amp;gt;]]: Monadic only&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:Navigation assistance]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Template:SF/doc&amp;diff=3640</id>
		<title>Template:SF/doc</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Template:SF/doc&amp;diff=3640"/>
		<updated>2019-10-13T21:33:39Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: new template&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following message is not shown when this template is used, only when viewed directly.&lt;br /&gt;
 &lt;br /&gt;
This template is used for System Functions that are used thus the name. It is placed at the bottom of appropriate pages.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Available System Function templates:&#039;&#039;&#039;&lt;br /&gt;
* [[Template:SFD|&amp;lt;nowiki&amp;gt;{{SFD}}&amp;lt;/nowiki&amp;gt;]]: Dyadic only&lt;br /&gt;
* [[Template:SFD|&amp;lt;nowiki&amp;gt;{{SFDM}}&amp;lt;/nowiki&amp;gt;]]: &#039;&#039;Both&#039;&#039; Dyadic and Monadic&lt;br /&gt;
* [[Template:SFM|&amp;lt;nowiki&amp;gt;{{SFM}}&amp;lt;/nowiki&amp;gt;]]: Monadic only&lt;br /&gt;
&lt;br /&gt;
&amp;lt;noinclude&amp;gt;[[Category:Navigation assistance]]&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Template:SFDM&amp;diff=3639</id>
		<title>Template:SFDM</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Template:SFDM&amp;diff=3639"/>
		<updated>2019-10-13T21:31:24Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: t/c&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;br/&amp;gt;Note: &amp;lt;big&amp;gt;⎕{{{1}}}&amp;lt;/big&amp;gt; is available as both a &#039;&#039;[[monadic]]&#039;&#039; and &#039;&#039;[[dyadic]]&#039;&#039; form system function, you cannot assign a value to it.&lt;br /&gt;
{{System Variables}}&amp;lt;noinclude&amp;gt;&lt;br /&gt;
{{SF/doc}}&lt;br /&gt;
[[Category:Navigation]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/noinclude&amp;gt;&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Creating_New_System_Functions&amp;diff=3638</id>
		<title>Creating New System Functions</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Creating_New_System_Functions&amp;diff=3638"/>
		<updated>2019-10-13T21:24:27Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: /* General Reference Notes */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; padding-left:5px;&amp;quot;&amp;gt;&lt;br /&gt;
{| style=&amp;quot;text-align:left; border:1px solid #aaaaaa; background-color:#f9f9f9;width: 200px;font-family: Verdana, sans-serif;&amp;quot;&lt;br /&gt;
|- padding:5px;padding-top:0.5em;font-size: 95%;&lt;br /&gt;
|&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #ccc; background: #fff; border-right:3px solid #ccc; border-bottom:3px solid #ccc; text-align: center; padding:3px; float:right; font-size: smaller; line-height: 1.3; margin-right: 4px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:100%&amp;quot;&amp;gt;{{CURRENTDAYNAME}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size: x-large; width: 100%;&amp;quot;&amp;gt;{{CURRENTDAY}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width: 100%;&amp;quot;&amp;gt; {{CURRENTMONTHNAME}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width: 100%;&amp;quot;&amp;gt;{{CURRENTYEAR}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #aaa; color: #000;&amp;quot;&amp;gt;&#039;&#039;&#039;{{CURRENTTIME}}&#039;&#039;&#039; UTC&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;NARS2000 Creating New Quad System Functions&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
__TOC__&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
==Who Should Be Reading This Page==&lt;br /&gt;
&lt;br /&gt;
If you are an APL&#039;er, an APL programmer or APL developer - this page &#039;&#039;&#039;may not&#039;&#039;&#039; be right for you.  This page is for &#039;&#039;&#039;Developers who want to implement a new Quad or &amp;lt;apll&amp;gt;{quad}&amp;lt;/apll&amp;gt; command&#039;&#039;&#039; using the C/C++ language in NARS source code.  Given that NARS source code is over a quarter million lines of highly evolved source code, it is helpful to have several starting points to work from, whether you are a gifted C++/C programmer, PHP programmer, Bison programmer or a relative newcomer to NARS source code.  The basic premise is that &#039;&#039;&#039;you&#039;&#039;&#039; have an idea for a &#039;&#039;&#039;new Quad system function&#039;&#039;&#039; command for APL/NARS and wish to implement it, add it to NARS functionality.  This page is a starting conceptual and reference point.&lt;br /&gt;
&lt;br /&gt;
==Helpful Starting Point Perspectives==&lt;br /&gt;
&lt;br /&gt;
Visually &#039;&#039;&#039;&amp;lt;u&amp;gt;scan&amp;lt;/u&amp;gt;&#039;&#039;&#039; or browse the &#039;&#039;&#039;Build notes&#039;&#039;&#039; found in the ReleaseNotes subfolder, normally located in &#039;&#039;&#039;C:\NARS2000\trunk\ReleaseNotes&#039;&#039;&#039; using a text or string scanner program such as Windows File Explorer with its &#039;&#039;&#039;Search&#039;&#039;&#039; text box.  Multiple time-lapsed prior examples of adding system functions should appear in those previous Build notes.  Search for the specific text string, &amp;quot;&#039;&#039;&#039;system function&#039;&#039;&#039;&amp;quot; and there should be a number of references found/listed.  These references give an idea of which files frequently need to be modified, including much about what you will need to do.  For example, file &#039;&#039;&#039;&amp;lt;sysvars.c&amp;gt;&#039;&#039;&#039; contains code locations where all system variables and functions hook into the system - a primary symbol tables reference, an interpreter-table-of-contents file.  You will further &#039;&#039;&#039;need to define a new c file&#039;&#039;&#039; for your system function, e.g. &amp;lt;qf_cmd.c&amp;gt; or &amp;lt;qf_menus.c&amp;gt; or &amp;lt;qf_grfx.c&amp;gt; or a similar name.  Defining any new file also requires some specific changes such as new entries in &amp;lt;compro.h&amp;gt;, &amp;lt;makefile.src&amp;gt;, and &amp;lt;makefile.inc&amp;gt;.  You&#039;ll also need to change &amp;lt;NARS2000.vcxproj&amp;gt; which you can do through Visual Studios 20xx GUI or IDE(integrated developer&#039;s environment).  Try to maintain a list of the various files you edit/change because if NARS subsequently moves to a new release and you need to synch with it, it is helpful to know which files you modified - to &#039;&#039;&#039;synch plus reinstate&#039;&#039;&#039;, to bring forward your local changes.&lt;br /&gt;
&lt;br /&gt;
For example, in C:\NARS2000\trunk\ReleaseNotes\Notes-1295.txt system function &#039;&#039;&#039;Quad T or &amp;lt;apll&amp;gt;{quad}&amp;lt;/apll&amp;gt;T&#039;&#039;&#039; was created and implemented, to return a Tick Count for time-sensitive APL subroutine stop-watch timing purposes.  The &#039;&#039;&#039;following seven files were edited/affected&#039;&#039;&#039; by the addition of system function &amp;lt;apll&amp;gt;{quad}&amp;lt;/apll&amp;gt;T into NARS2000.exe.  Listed below are edited notations extracted from &amp;lt;Notes-1295.txt&amp;gt;:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
COMPRO.H:   #1&lt;br /&gt;
  Include &amp;lt;qf_t.pro&amp;gt; in the list of prototype files.&lt;br /&gt;
&lt;br /&gt;
MAKEFILE.INC:   #2&lt;br /&gt;
MAKEFILE.SRC:   #3&lt;br /&gt;
NARS2000.32.VCPROJ:   #4&lt;br /&gt;
NARS2000.64.VCPROJ:   #5&lt;br /&gt;
  Include &amp;lt;qf_t.c&amp;gt; in the list of source files.   #6&lt;br /&gt;
&lt;br /&gt;
QF_T.C   #6(again)&lt;br /&gt;
  Implement []T.&lt;br /&gt;
&lt;br /&gt;
SYSVARS.C:   #7&lt;br /&gt;
  Include []T in the list of niladic system functions.&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Note above how &#039;&#039;&#039;&amp;lt;u&amp;gt;filenames edited/changed were kept track of&amp;lt;/u&amp;gt;&#039;&#039;&#039;, including general notes on what was performed &#039;&#039;&#039;&amp;lt;u&amp;gt;including the purpose of the revision&amp;lt;/u&amp;gt;&#039;&#039;&#039;/edit-change by the System Developer.  This filename + purpose tracking along with associated note keeping is considered good programming, &#039;&#039;&#039;&amp;lt;u&amp;gt;a best developer practice&amp;lt;/u&amp;gt;&#039;&#039;&#039;.  Such detailed record-keeping makes program flow and source-code maintenance much easier to follow and subsequently revise as needed.&lt;br /&gt;
&lt;br /&gt;
Continuing with the formation or genesis process re system function &amp;lt;apll&amp;gt;{quad}&amp;lt;/apll&amp;gt;T example just above, viewing(using a standard text editor such as notepad.exe) file &amp;lt;qf_t.c&amp;gt; which is the central &amp;lt;apll&amp;gt;{quad}&amp;lt;/apll&amp;gt;T function-defining c file, you will note that the mnemonic(see [[#General Reference Notes]]) for &amp;lt;apll&amp;gt;{quad}&amp;lt;/apll&amp;gt;T is SysFnT_EM_YY.  A File Explorer search for string SysFnT_EM_YY will bring up primarily &#039;&#039;&#039;two&#039;&#039;&#039; found-in files, &amp;lt;qf_t.c&amp;gt; and &amp;lt;sysvars.c&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Therefore we may conclude or determine - that operational functionality for this particular system function &amp;lt;apll&amp;gt;{quad}&amp;lt;/apll&amp;gt;T was contained in just two files.  The other five affected files, and not to be ignored, were impacted for overall programming structural integrity, potential debugging/compilation, and NARS2000 overall modeling purposes.  Not every System Function impacts or requires so few files, but &amp;lt;apll&amp;gt;{quad}&amp;lt;/apll&amp;gt;T is a solid &#039;minimal impact elsewhere&#039; System Function example.&lt;br /&gt;
&lt;br /&gt;
==Source Code Conventions and Abbreviations Dictionary==&lt;br /&gt;
&lt;br /&gt;
NARS C source code contains many abbreviations.  To better understand NARS source code and or to better understand a source code process, particularly if you are new to looking at or working with its C source code, view &#039;&#039;&#039;[[C Source Code Conventions and Abbreviations Dictionary]]&#039;&#039;&#039; here.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr width=85%&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;sysvars.c&amp;gt; Reference Table==&lt;br /&gt;
&lt;br /&gt;
All &amp;lt;apll&amp;gt;{quad}&amp;lt;/apll&amp;gt; System Variables and System Functions, per system reference table (7 column table) are listed/defined within file &amp;lt;sysvars.c&amp;gt;. Quad T&#039;s entry is extracted just below.  The sysvars table helps APL&#039;s interpreter understand &amp;quot;how&amp;quot; to handle each quad system variable and function, how each is &amp;quot;supposed to operate&amp;quot;; thus helping the Interpreter identify syntax errors, valence errors, domain errors, etc.&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;apll&amp;gt;{quad}&amp;lt;/apll&amp;gt;T&#039;s entry(within niladic system functions grouping) in table:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! SysName&lt;br /&gt;
! Valence&lt;br /&gt;
! Var?&lt;br /&gt;
! Std?&lt;br /&gt;
! Exec Routine(name)&lt;br /&gt;
! Sys_Vars&lt;br /&gt;
! Descr&lt;br /&gt;
|-&lt;br /&gt;
| QUAD L&amp;quot;t&amp;quot; &lt;br /&gt;
| 0 &lt;br /&gt;
| FALSE &lt;br /&gt;
| FALSE &lt;br /&gt;
| SysFnT_EM_YY &lt;br /&gt;
| 0 &lt;br /&gt;
| High Resolution Time&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Every APL/APL2 Quad System Variable and Quad System Function(niladic, monadic and dyadic) has an entry in the &amp;lt;sysvars.c&amp;gt; table. System function &amp;lt;apll&amp;gt;{quad}&amp;lt;/apll&amp;gt;T, because it is niladic, has a zero valence; it is not a System Variable(False); it has a function mnemonic or calling name = SysFnT_EM_YY; it uses zero system variables.&lt;br /&gt;
&lt;br /&gt;
==Frequently Used TypeDef Structures and Variables==&lt;br /&gt;
&lt;br /&gt;
NARS has multiple frequently used TypeDefs, Structures and Variables.  Familiarity with these structures and the variables employed is essential to gain a better understanding of how NARS C source code works and comprehending program flow, view &#039;&#039;&#039;[[Frequently Used TypeDef Structures and Variables]]&#039;&#039;&#039; here.&lt;br /&gt;
&lt;br /&gt;
==⎕EC as System Function Coding Example, Returning a Nested Array==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[System_Function_EC|System Function ⎕EC]]&#039;&#039;&#039; is useful to APLers for testing purposes, but it also is useful for NARS source code analysis purposes precisely because - it illustrates how to return a nested vector back to APL, view &#039;&#039;&#039;[[Quad EC C Source Code Analysis]]&#039;&#039;&#039; here.&lt;br /&gt;
&lt;br /&gt;
==Setting Up for Cross-Reference Call To Another APL or System Function==&lt;br /&gt;
&lt;br /&gt;
In creating a new System Function or even a new APL function, it can be useful to call another already established &#039;&#039;&#039;APL or system&#039;&#039;&#039; function to perform part of the new pre-processing-configuration-setup or post-close-done requirements.  One of the frequently encountered parameters to nearly every &#039;&#039;&#039;&amp;lt;u&amp;gt;function call&amp;lt;/u&amp;gt;&#039;&#039;&#039; is a parameter usually named &#039;&#039;&#039;lptkFunc&#039;&#039;&#039; or &#039;&#039;&#039;tkFcn&#039;&#039;&#039; - known variously as line pointer to a token function or just token function.  tkFcn will be potentially needed in the soon-to-be-called function in case it mandates use for something else; it represents sort of a dynamically changing location-operation recognition tracker.  As an analogy, &#039;&#039;&#039;Windows&#039;&#039;&#039; operating system uses program registrations(ref. software installs and regedit) so Windows will &amp;quot;know&amp;quot; each program when it runs and can report errors and abends; &#039;&#039;&#039;NARS&#039;&#039;&#039; uses token-function structures so its APL Interpreter will know each APL and system function as it in turn runs.&lt;br /&gt;
&lt;br /&gt;
From file &amp;lt;pf_uarrow.c&amp;gt;, the following lines were edit-extracted:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
     TOKEN        tkFcn = {0};   // tkFcn token function struct. var defined, initialized to zero in vars declaration section of uarrow function.&lt;br /&gt;
     [...]                       // Intermediary unrelated code&lt;br /&gt;
     // Setup token structure for use in calling rho {the shape of} function (which uarrow i.e. APL&#039;s &amp;quot;take&amp;quot; now needs):&lt;br /&gt;
     tkFcn.tkFlags.TknType   = TKT_FCNIMMED;&lt;br /&gt;
     tkFcn.tkFlags.ImmType   = IMMTYPE_PRIMFCN;&lt;br /&gt;
////tkFcn.tkFlags.NoDisplay = FALSE;       // Commented out because already zero from = {0}&lt;br /&gt;
     tkFcn.tkData.tkChar     = UTF16_RHO;  // Unicode transformation format, 16-bit-coding for Rho - identifies function/operator being called.&lt;br /&gt;
     tkFcn.tkCharIndex       = lptkFunc-&amp;gt;tkCharIndex;   // Standard caret pointer&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
In order to cross calculate &#039;&#039;&#039;⍴R&#039;&#039;&#039;(the shape of right hand argument variable &#039;&#039;&#039;R&#039;&#039;&#039; - tkFcn/UTF16_RHO (shortly will be processing inside function Rho) &#039;&#039;&#039;is passed&#039;&#039;&#039; in the above example &#039;&#039;&#039;from&#039;&#039;&#039; call-from up-arrow code(file &amp;lt;pf_uarrow.c&amp;gt;) - the APL &#039;&#039;&#039;take&#039;&#039;&#039; function).  Another reference to &amp;lt;lptkFunc&amp;gt; would be similar to function tokening use above, but say to the LeftShoe symbol (UTF16_LEFTSHOE or APL&#039;s &#039;&#039;&#039;⊂ enclose&#039;&#039;&#039; symbol).  An often used element of the function token is &amp;lt;tkCharIndex&amp;gt; which is used as the caret pointer in case an error occurs and an error message would then be formed into &#039;&#039;&#039;[[System_Variable_DM|⎕DM]]&#039;&#039;&#039; and &#039;&#039;&#039;[[System_Command_SI|)SI]]&#039;&#039;&#039;, workspace state indicator would get set.  The function token structure is key to allowing APL&#039;s interpreter know how to keep track of where the program is processing-at and, as needed, correctly report errors.&lt;br /&gt;
&lt;br /&gt;
For the full list of available UTF16_* variables, see file &amp;lt;symbolnames.h&amp;gt;.  To search in Visual Studio 2013 (load NARS2000 project first) - for existing NARS &#039;&#039;&#039;examples&#039;&#039;&#039; of where tkFcn is used, i.e. set up, in VS2013 - Edit - FindAndReplace - FindInFiles use search string &amp;quot;&amp;lt;u&amp;gt;&#039;&#039;&#039;tkFcn.&#039;&#039;&#039;&amp;lt;/u&amp;gt;&amp;quot; and note the dot as the rightmost &amp;quot;search on&amp;quot; char; and click the [Find All] button.&lt;br /&gt;
&lt;br /&gt;
==Source Code Derived List of APL System Functions==&lt;br /&gt;
&lt;br /&gt;
Source Code List of NARS Quad &#039;&#039;&#039;&amp;lt;apll&amp;gt;{quad}&amp;lt;/apll&amp;gt; System Functions&#039;&#039;&#039;, per qf_*.c Files Derivative.  Sys Fcn Ct=31.  Snapshot as of 7/26/15:&amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! QuadFcn c FileName&lt;br /&gt;
!| &lt;br /&gt;
! APL System Function&lt;br /&gt;
! Mnemonic Exec Name&lt;br /&gt;
! c FileSize&lt;br /&gt;
! Subordinate Monadic-Dyadic Name&lt;br /&gt;
! Cross Refs, Magic Functions, Misc.&lt;br /&gt;
! Function Type (sysvars.c)&lt;br /&gt;
! Description (sysvars.c)&lt;br /&gt;
|-&lt;br /&gt;
| C:\NARS2000\trunk\qf_a.c|| &#039;&#039;&#039;{{SF|A |}}&#039;&#039;&#039; &#039;&#039;&#039;SysFnA_EM_YY&#039;&#039;&#039;|| 3,151|| || &lt;br /&gt;
| Niladic&lt;br /&gt;
| Alphabet&lt;br /&gt;
|-&lt;br /&gt;
| C:\NARS2000\trunk\qf_at.c|| &#039;&#039;&#039;{{SF|AT |}}&#039;&#039;&#039; &#039;&#039;&#039;SysFnAT_EM_YY&#039;&#039;&#039;|| 44,356|| SysFnMonAT_EM_YY SysFnDydAT_EM_YY|| &lt;br /&gt;
| Monadic or Dyadic&lt;br /&gt;
| Attributes&lt;br /&gt;
|-&lt;br /&gt;
| C:\NARS2000\trunk\qf_av.c|| &#039;&#039;&#039;{{SF|AV |}}&#039;&#039;&#039; &#039;&#039;&#039;SysFnAV_EM_YY&#039;&#039;&#039;|| 5,188|| || &lt;br /&gt;
| Niladic&lt;br /&gt;
| Atomic Vector&lt;br /&gt;
|-&lt;br /&gt;
| C:\NARS2000\trunk\qf_cr.c|| &#039;&#039;&#039;{{SF|CR |}}&#039;&#039;&#039; &#039;&#039;&#039;SysFnCR_EM_YY&#039;&#039;&#039;|| 33,687|| SysFnMonCR_EM_YY SysFnDydCR_EM_YY SysFnCR_Common_EM_YY SysFnMon_CR_EM_YY SysFnCR_Copy_EM_YY|| &lt;br /&gt;
| Monadic or Dyadic&lt;br /&gt;
| Canonical Representation&lt;br /&gt;
|-&lt;br /&gt;
| C:\NARS2000\trunk\qf_d.c|| &#039;&#039;&#039;{{SF|D |}}&#039;&#039;&#039; &#039;&#039;&#039;SysFnD_EM_YY&#039;&#039;&#039;|| 3,149|| || &lt;br /&gt;
| Niladic&lt;br /&gt;
| Digits&lt;br /&gt;
|-&lt;br /&gt;
| C:\NARS2000\trunk\qf_dl.c|| &#039;&#039;&#039;{{SF|DL |}}&#039;&#039;&#039; &#039;&#039;&#039;SysFnDL_EM_YY&#039;&#039;&#039;|| 8,265|| SysFnMonDL_EM_YY SysFnDydDL_EM_YY|| &lt;br /&gt;
| Monadic or Dyadic&lt;br /&gt;
| Delay Execution&lt;br /&gt;
|-&lt;br /&gt;
| C:\NARS2000\trunk\qf_dr.c|| &#039;&#039;&#039;{{SF|DR |}}&#039;&#039;&#039; &#039;&#039;&#039;SysFnDR_EM_YY&#039;&#039;&#039;|| 49,334|| SysFnMonDR_EM_YY SysFnDydDR_EM_YY SysFnDR_Show_EM_YY SysFnDR_Convert_EM_YY|| &lt;br /&gt;
| Monadic or Dyadic&lt;br /&gt;
| Data Representation&lt;br /&gt;
|-&lt;br /&gt;
| C:\NARS2000\trunk\qf_ea.c|| &#039;&#039;&#039;{{SF|EA |}}&#039;&#039;&#039; &#039;&#039;&#039;SysFnEA_EM_YY&#039;&#039;&#039;|| 9,565|| SysFnMonEA_EM_YY SysFnDydEA_EM_YY|| PrimFnMonUpTackJotCommon_EM_YY&lt;br /&gt;
| Monadic or Dyadic&lt;br /&gt;
| Execute Alternate&lt;br /&gt;
|-&lt;br /&gt;
| C:\NARS2000\trunk\qf_ec.c|| &#039;&#039;&#039;{{SF|EC |}}&#039;&#039;&#039; &#039;&#039;&#039;SysFnEC_EM_YY&#039;&#039;&#039;|| 17,469|| SysFnMonEC_EM_YY SysFnDydEC_EM_YY|| PrimFnMonUpTackJotCommon_EM_YY&lt;br /&gt;
| Monadic or Dyadic&lt;br /&gt;
| Execute Controlled&lt;br /&gt;
|-&lt;br /&gt;
| C:\NARS2000\trunk\qf_em.c|| &#039;&#039;&#039;{{SF|EM |}}&#039;&#039;&#039; &#039;&#039;&#039;SysFnEM_EM_YY&#039;&#039;&#039;|| 3,106|| || &lt;br /&gt;
| Niladic&lt;br /&gt;
| Event Message&lt;br /&gt;
|-&lt;br /&gt;
| C:\NARS2000\trunk\qf_error.c|| &#039;&#039;&#039;{{SF|ERROR |}}&#039;&#039;&#039; &#039;&#039;&#039;SysFnERROR_EM_YY&#039;&#039;&#039;|| 7,129|| SysFnMonERROR_EM_YY SysFnDydERROR_EM_YY|| &lt;br /&gt;
| Monadic or Dyadic&lt;br /&gt;
| Signal Error&lt;br /&gt;
|-&lt;br /&gt;
| C:\NARS2000\trunk\qf_es.c|| &#039;&#039;&#039;{{SF|ES |}}&#039;&#039;&#039; &#039;&#039;&#039;SysFnES_EM_YY&#039;&#039;&#039;|| 18,322|| SysFnMonES_EM_YY SysFnDydES_EM_YY|| &lt;br /&gt;
| Monadic or Dyadic&lt;br /&gt;
| Event Simulate&lt;br /&gt;
|-&lt;br /&gt;
| C:\NARS2000\trunk\qf_et.c|| &#039;&#039;&#039;{{SF|ET |}}&#039;&#039;&#039; &#039;&#039;&#039;SysFnET_EM_YY&#039;&#039;&#039;|| 6,645|| || &lt;br /&gt;
| Niladic&lt;br /&gt;
| Event Type&lt;br /&gt;
|-&lt;br /&gt;
| C:\NARS2000\trunk\qf_ex.c|| &#039;&#039;&#039;{{SF|EX |}}&#039;&#039;&#039; &#039;&#039;&#039;SysFnEX_EM_YY&#039;&#039;&#039;|| 23,537|| SysFnMonEX_EM_YY SysFnDydEX_EM_YY|| &lt;br /&gt;
| Monadic or Dyadic&lt;br /&gt;
| Expunge Names&lt;br /&gt;
|-&lt;br /&gt;
| C:\NARS2000\trunk\qf_fmt.c|| &#039;&#039;&#039;{{SF|FMT |}}&#039;&#039;&#039; &#039;&#039;&#039;SysFnFMT_EM_YY&#039;&#039;&#039;|| 108,506|| SysFnMonFMT_EM_YY SysFnDydFMT_EM_YY|| ExecuteMagicFunction_EM_YY&lt;br /&gt;
| Monadic or Dyadic&lt;br /&gt;
| Format&lt;br /&gt;
|-&lt;br /&gt;
| C:\NARS2000\trunk\qf_fx.c|| &#039;&#039;&#039;{{SF|FX |}}&#039;&#039;&#039; &#039;&#039;&#039;SysFnFX_EM_YY&#039;&#039;&#039;|| 18,028|| SysFnMonFX_EM_YY SysFnDydFX_EM_YY SysFnMon_FX_EM_YY|| &lt;br /&gt;
| Monadic or Dyadic&lt;br /&gt;
| Function Fix&lt;br /&gt;
|-&lt;br /&gt;
| C:\NARS2000\trunk\qf_host.c|| &#039;&#039;&#039;{{SF|HOST |}}&#039;&#039;&#039; &#039;&#039;&#039;SysFnHOST_EM_YY&#039;&#039;&#039;|| 10,905|| SysFnMonHOST_EM_YY SysFnDydHOST_EM_YY|| &lt;br /&gt;
| Monadic or Dyadic&lt;br /&gt;
| Launch Programs on Host OS&lt;br /&gt;
|-&lt;br /&gt;
| C:\NARS2000\trunk\qf_lc.c|| &#039;&#039;&#039;{{SF|LC |}}&#039;&#039;&#039; &#039;&#039;&#039;SysFnLC_EM_YY&#039;&#039;&#039;|| 5,679|| || &lt;br /&gt;
| Niladic&lt;br /&gt;
| Line Counter&lt;br /&gt;
|-&lt;br /&gt;
| C:\NARS2000\trunk\qf_mf.c|| &#039;&#039;&#039;{{SF|MF |}}&#039;&#039;&#039; &#039;&#039;&#039;SysFnMF_EM_YY&#039;&#039;&#039;|| 38,096|| SysFnMonMF_EM_YY SysFnDydMF_EM_YY|| &lt;br /&gt;
| Monadic or Dyadic&lt;br /&gt;
| Monitor Function&lt;br /&gt;
|-&lt;br /&gt;
| C:\NARS2000\trunk\qf_nc.c|| &#039;&#039;&#039;{{SF|NC |}}&#039;&#039;&#039; &#039;&#039;&#039;SysFnNC_EM_YY&#039;&#039;&#039;|| 20,952|| SysFnMonNC_EM_YY SysFnDydNC_EM_YY|| &amp;lt;SysFnDydNL_EM_YY&lt;br /&gt;
| Monadic or Dyadic&lt;br /&gt;
| Name Classification&lt;br /&gt;
|-&lt;br /&gt;
| C:\NARS2000\trunk\qf_nfns.c|| &#039;&#039;&#039;{{SF|NFNS |}}&#039;&#039;&#039; &#039;&#039;&#039;SysFnNAPPEND_EM_YY&#039;&#039;&#039;|| 260,952|| || SysFnNAPPEND_EM_YY SysFnMonNAPPEND_EM_YY SysFnDydNAPPEND_EM_YY SysFnNCREATE_EM_YY SysFnMonNCREATE_EM_YY SysFnDydNCREATE_EM_YY SysFnCreateTie_EM_YY SysFnNERASE_EM_YY SysFnMonNERASE_EM_YY SysFnDydNERASE_EM_YY SysFnNLOCK_EM_YY SysFnMonNLOCK_EM_YY SysFnDydNLOCK_EM_YY SysFnNNAMES_EM_YY SysFnNNUMS_EM_YY SysFnNREAD_EM_YY SysFnMonNREAD_EM_YY SysFnDydNREAD_EM_YY SysFnNRENAME_EM_YY SysFnMonNRENAME_EM_YY SysFnDydNRENAME_EM_YY SysFnNREPLACE_EM_YY SysFnMonNREPLACE_EM_YY SysFnDydNREPLACE_EM_YY SysFnNRESIZE_EM_YY SysFnMonNRESIZE_EM_YY SysFnDydNRESIZE_EM_YY SysFnNSIZE_EM_YY SysFnMonNSIZE_EM_YY SysFnDydNSIZE_EM_YY SysFnNTIE_EM_YY SysFnMonNTIE_EM_YY SysFnDydNTIE_EM_YY SysFnNUNTIE_EM_YY SysFnMonNUNTIE_EM_YY SysFnDydNUNTIE_EM_YY&lt;br /&gt;
| Monadic or Dyadic&lt;br /&gt;
| Append Data To An Open Native File&lt;br /&gt;
|-&lt;br /&gt;
| C:\NARS2000\trunk\qf_nl.c|| &#039;&#039;&#039;{{SF|NL |}}&#039;&#039;&#039; &#039;&#039;&#039;SysFnNL_EM_YY&#039;&#039;&#039;|| 17,698|| SysFnMonNL_EM_YY SysFnDydNL_EM_YY|| &lt;br /&gt;
| Monadic or Dyadic&lt;br /&gt;
| Name List&lt;br /&gt;
|-&lt;br /&gt;
| C:\NARS2000\trunk\qf_sysid.c|| &#039;&#039;&#039;{{SF|SYSID |}}&#039;&#039;&#039; &#039;&#039;&#039;SysFnSYSID_EM_YY&#039;&#039;&#039;|| 4,826|| || &lt;br /&gt;
| Niladic&lt;br /&gt;
| System Identifier&lt;br /&gt;
|-&lt;br /&gt;
| C:\NARS2000\trunk\qf_sysver.c|| &#039;&#039;&#039;{{SF|SYSVER |}}&#039;&#039;&#039; &#039;&#039;&#039;SysFnSYSVER_EM_YY&#039;&#039;&#039;|| 8,556|| || &lt;br /&gt;
| Niladic&lt;br /&gt;
| System Version&lt;br /&gt;
|-&lt;br /&gt;
| C:\NARS2000\trunk\qf_t.c|| &#039;&#039;&#039;{{SF|T |}}&#039;&#039;&#039; &#039;&#039;&#039;SysFnT_EM_YY&#039;&#039;&#039;|| 3,542|| || SysFnD_EM_YY&lt;br /&gt;
| Niladic&lt;br /&gt;
| High Resolution Time&lt;br /&gt;
|-&lt;br /&gt;
| C:\NARS2000\trunk\qf_tc.c|| &#039;&#039;&#039;{{SF|TC |}}&#039;&#039;&#039; &#039;&#039;&#039;SysFnTC_EM_YY&#039;&#039;&#039;|| 12,390|| SysFnTCCom_EM_YY SysFnTCCOM_EM_YY SysFnTCBEL_EM_YY SysFnTCBS_EM_YY SysFnTCESC_EM_YY SysFnTCFF_EM_YY SysFnTCHT_EM_YY SysFnTCLF_EM_YY SysFnTCNL_EM_YY SysFnTCNUL_EM_YY|| &lt;br /&gt;
| Niladic&lt;br /&gt;
| Terminal Control Characters&lt;br /&gt;
|-&lt;br /&gt;
| C:\NARS2000\trunk\qf_tf.c|| &#039;&#039;&#039;{{SF|TF |}}&#039;&#039;&#039; &#039;&#039;&#039;SysFnTF_EM_YY&#039;&#039;&#039;|| 53,263|| SysFnMonTF_EM_YY SysFnDydTF_EM_YY SysFnDydTF1_EM_YY SysFnDydTF2_EM_YY|| &lt;br /&gt;
| Monadic or Dyadic&lt;br /&gt;
| Transfer Form&lt;br /&gt;
|-&lt;br /&gt;
| C:\NARS2000\trunk\qf_ts.c|| &#039;&#039;&#039;{{SF|TS |}}&#039;&#039;&#039; &#039;&#039;&#039;SysFnTS_EM_YY&#039;&#039;&#039;|| 5,165|| || &lt;br /&gt;
| Niladic&lt;br /&gt;
| Time Stamp&lt;br /&gt;
|-&lt;br /&gt;
| C:\NARS2000\trunk\qf_ucs.c|| &#039;&#039;&#039;{{SF|UCS |}}&#039;&#039;&#039; &#039;&#039;&#039;SysFnUCS_EM_YY&#039;&#039;&#039;|| 23,003|| SysFnMonUCS_EM_YY SysFnDydUCS_EM_YY SysnMonUCS_EM_YY|| &lt;br /&gt;
| Monadic or Dyadic&lt;br /&gt;
| Universal Character Set&lt;br /&gt;
|-&lt;br /&gt;
| C:\NARS2000\trunk\qf_vr.c|| &#039;&#039;&#039;{{SF|VR |}}&#039;&#039;&#039; &#039;&#039;&#039;SysFnVR_EM_YY&#039;&#039;&#039;|| 5,624|| SysFnMonVR_EM_YY SysFnDydVR_EM_YY|| ExecuteMagicFunction_EM_YY&lt;br /&gt;
| Monadic or Dyadic&lt;br /&gt;
| Vector Representation of a Function&lt;br /&gt;
|-&lt;br /&gt;
| C:\NARS2000\trunk\qf_wa.c|| &#039;&#039;&#039;{{SF|WA |}}&#039;&#039;&#039; &#039;&#039;&#039;SysFnWA_EM_YY&#039;&#039;&#039;|| 3,367|| || &lt;br /&gt;
| Niladic&lt;br /&gt;
| Workspace Available&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr width=85%&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Magic Function C Header File vs APL - a Comparison==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&amp;lt;u&amp;gt;Extract&amp;lt;/u&amp;gt;&#039;&#039;&#039; from NARS file &amp;lt;big&amp;gt;&#039;&#039;&#039;&amp;lt;u&amp;gt;C:\NARS2000\trunk\mf_quadvr.h&amp;lt;/u&amp;gt;&#039;&#039;&#039;&amp;lt;/big&amp;gt; for &#039;&#039;&#039;System Function&#039;&#039;&#039; &amp;lt;big&amp;gt;&amp;lt;apll&amp;gt;{quad}&amp;lt;/apll&amp;gt;VR&amp;lt;/big&amp;gt; (C source code header file, just below):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
//***************************************************************************&lt;br /&gt;
//  Magic function/operator for Monadic []VR&lt;br /&gt;
//&lt;br /&gt;
//  Monadic []VR -- Visual Representation&lt;br /&gt;
//&lt;br /&gt;
//  Return a visual representation of a user-defined function/operator&lt;br /&gt;
//***************************************************************************&lt;br /&gt;
&lt;br /&gt;
static APLCHAR MonHeaderVR[] =&lt;br /&gt;
  L&amp;quot;Z←&amp;quot; MFON_MonVR L&amp;quot; R;L;⎕IO&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
static APLCHAR MonLineVR1[] =  &lt;br /&gt;
  L&amp;quot;⎕IO←0 ⋄ Z←1 ##.⎕CR R&amp;quot;;&lt;br /&gt;
  &lt;br /&gt;
static APLCHAR MonLineVR2[] =  &lt;br /&gt;
  L&amp;quot;→(0≠⍴Z)/L1 ⋄ Z←&#039;&#039; ⋄ →0&amp;quot;;&lt;br /&gt;
  &lt;br /&gt;
static APLCHAR MonLineVR3[] =  &lt;br /&gt;
  L&amp;quot;L1:→(1=≡Z)/0&amp;quot;;&lt;br /&gt;
  &lt;br /&gt;
static APLCHAR MonLineVR4[] =  &lt;br /&gt;
  L&amp;quot;L←&#039;∇&#039;∊0⊃Z&amp;quot;;&lt;br /&gt;
  &lt;br /&gt;
static APLCHAR MonLineVR5[] =  &lt;br /&gt;
  L&amp;quot;Z←(∊((⊂[1]&#039;LO&amp;lt;    ∇&amp;gt;P&amp;lt;[&amp;gt;Q&amp;lt;]&amp;gt;I6&#039; ⎕FMT⍳⍴Z),¨Z),¨⎕TCNL),&#039;    ∇&#039;&amp;quot;;&lt;br /&gt;
  &lt;br /&gt;
static APLCHAR MonLineVR6[] =  &lt;br /&gt;
  L&amp;quot;→L/0 ⋄ Z←Z,(&#039; &#039;,⍕2 ##.⎕AT R),&#039; (UTC)&#039;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
static LPAPLCHAR MonBodyVR[] =&lt;br /&gt;
{MonLineVR1,&lt;br /&gt;
 MonLineVR2,&lt;br /&gt;
 MonLineVR3,&lt;br /&gt;
 MonLineVR4,&lt;br /&gt;
 MonLineVR5,&lt;br /&gt;
 MonLineVR6,&lt;br /&gt;
};&lt;br /&gt;
&lt;br /&gt;
MAGIC_FCNOPR MFO_MonVR =&lt;br /&gt;
{MonHeaderVR,&lt;br /&gt;
 MonBodyVR,&lt;br /&gt;
 countof (MonBodyVR),&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;apll&amp;gt;{quad}&amp;lt;/apll&amp;gt;VR - &#039;&#039;&#039;APL&#039;&#039;&#039; monadic function named &#039;&#039;&#039;MFON_MonVR&#039;&#039;&#039;(just below):&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
      ⎕CR &#039;MFON_MonVR&#039;&lt;br /&gt;
Z←MFON_MonVR R;L;⎕IO                                        &lt;br /&gt;
⎕IO←0 ⋄ Z←1 ##.⎕CR R                                        &lt;br /&gt;
→(0≠⍴Z)/L1 ⋄ Z←&#039;&#039; ⋄ →0                                      &lt;br /&gt;
L1:→(1=≡Z)/0                                                &lt;br /&gt;
L←&#039;∇&#039;∊0⊃Z                                                   &lt;br /&gt;
Z←(∊((⊂[1]&#039;LO&amp;lt;    ∇&amp;gt;P&amp;lt;[&amp;gt;Q&amp;lt;]&amp;gt;I6&#039; ⎕FMT⍳⍴Z),¨Z),¨⎕TCNL),&#039;    ∇&#039;&lt;br /&gt;
→L/0 ⋄ Z←Z,(&#039; &#039;,⍕2 ##.⎕AT R),&#039; (UTC)&#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Note the displaced lines yes, but great/identical similarity exists between the UTF-8 C source code header &amp;lt;u&amp;gt;file&amp;lt;/u&amp;gt; and the actual &#039;&#039;&#039;APL &amp;lt;u&amp;gt;function&amp;lt;/u&amp;gt;&#039;&#039;&#039; MFON_MonVR. In a very real sense, APL source code was imported directly into C source code via a header file, using a &#039;&#039;&#039;magic function&#039;&#039;&#039;.  Hence the term &#039;&#039;&#039;magic&#039;&#039;&#039; since APL magically gets executed inside a compiled C program.  This is somewhat code-wise equivalent to using the &amp;lt;apll&amp;gt;{execute}&amp;lt;/apll&amp;gt;(execute) function in APL.  Technically the APL simulation in C was made possible and accomplished via re-formatting the &amp;lt;apll&amp;gt;{quad}CR&amp;lt;/apll&amp;gt; representation of an APL function, placing it into a C source code header file, and using PHP in the NARS2000 project model.  Also technically, note the use of &#039;&#039;&#039;L&amp;lt;apll&amp;gt;&amp;quot;&amp;lt;/apll&amp;gt;&#039;&#039;&#039; in the header file at the front of several lines - the presence of the prefix &#039;&#039;&#039;L&#039;&#039;&#039; in C source code indicates &#039;&#039;&#039;Unicode string&#039;&#039;&#039; to the C compiler.&lt;br /&gt;
&lt;br /&gt;
Ref. also [[System_Function_VR|System Function ⎕VR]] and [[System_Function_CR|System Function ⎕CR]]&lt;br /&gt;
&lt;br /&gt;
For &amp;lt;u&amp;gt;Magic Functions&amp;lt;/u&amp;gt;: In addition to creating a header file such as &#039;&#039;&#039;mf_quadvr.h&#039;&#039;&#039;, magic function header files need reference via a caller file such as &#039;&#039;&#039;qf_vr.c&#039;&#039;&#039;.  Also, referencing table entries may frequently be required in files &#039;&#039;&#039;execmfn.h&#039;&#039;&#039; and &#039;&#039;&#039;execmfn.c&#039;&#039;&#039; within the &#039;&#039;&#039;\trunk&#039;&#039;&#039; folder.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr width=85%&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==C Source List of APL Functions==&lt;br /&gt;
&lt;br /&gt;
C Source List of APL Functions with Cross References (per C:\NARS2000\trunk\pf_*.c) as of 7/26/15:&amp;lt;br&amp;gt;&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! NARS C Source File&lt;br /&gt;
! APL Name&lt;br /&gt;
! C Funct Name&lt;br /&gt;
! Subordinate Monadic and or Dyadic Name&lt;br /&gt;
! Cross References, Protos and Renames&lt;br /&gt;
|-&lt;br /&gt;
| pf_bar.c|| Bar|| PrimFnBar_EM_YY|| PrimFnMon_EM_YY, PrimFnDyd_EM_YY|| &lt;br /&gt;
|-&lt;br /&gt;
| pf_circle.c|| Circle|| PrimFnCircle_EM_YY|| PrimFnMon_EM_YY, PrimFnDyd_EM_YY|| &lt;br /&gt;
|-&lt;br /&gt;
| pf_colonbar.c|| ColonBar|| PrimFnColonBar_EM_YY|| PrimFnMon_EM_YY, PrimFnDyd_EM_YY|| &lt;br /&gt;
|-&lt;br /&gt;
| pf_comma.c|| Comma|| PrimFnComma_EM_YY|| PrimFnMonComma_EM_YY, PrimFnDydComma_EM_YY, PrimIdentFnComma_EM_YY, PrimFnMonCommaScalar_EM_YY, PrimFnMonCommaGlb_EM_YY|| PrimProtoFnComma_EM_YY, PrimProtoFnMixed_EM_YY, PrimFnDydSlash_EM_YY&lt;br /&gt;
|-&lt;br /&gt;
| pf_cslope.c|| CircleSlope|| PrimFnCircleSlope_EM_YY|| PrimFnMonCircleSlope_EM_YY, PrimFnDydCircleSlope_EM_YY, PrimIdentFnCircleSlope_EM_YY|| PrimProtoFnCircleSlope_EM_YY, PrimProtoFnMixed_EM_YY, PrimFnMonIota_EM_YY&lt;br /&gt;
|-&lt;br /&gt;
| pf_cstar.c|| CircleStar|| PrimFnCircleStar_EM_YY|| PrimFnMon_EM_YY, PrimFnDyd_EM_YY|| &lt;br /&gt;
|-&lt;br /&gt;
| pf_cstile.c|| CircleStile|| PrimFnCircleStile_EM_YY|| PrimFnMonCircleStile_EM_YY, PrimFnDydCircleStile_EM_YY, PrimIdentFnCircleStile_EM_YY|| PrimProtoFnCircleStile_EM_YY, PrimProtoFnMixed_EM_YY&lt;br /&gt;
|-&lt;br /&gt;
| pf_darrow.c|| DownArrow|| PrimFnDownArrow_EM_YY|| PrimFnMonDownArrow_EM_YY, PrimFnDydDownArrow_EM_YY, PrimIdentFnDownArrow_EM_YY, PrimIdentDownArrow_EM_YY|| PrimProtoFnDownArrow_EM_YY, PrimProtoFnMixed_EM_YY&lt;br /&gt;
|-&lt;br /&gt;
| pf_dcaret.c|| DownCaret|| PrimFnDownCaret_EM_YY|| PrimFnDyd_EM_YY, PrimFnMon_EM_YY|| &lt;br /&gt;
|-&lt;br /&gt;
| pf_deltastile.c|| DeltaStile|| PrimFnDeltaStile_EM_YY|| || PrimFnMonGradeCommon_EM_YY, PrimFnDydGradeCommon_EM_YY, PrimFnDelStile_EM_YY, PrimProtoFnDeltaStile_EM_YY, PrimProtoFnMixed_EM_YY, PrimProtoFnDelStile_EM_YY&lt;br /&gt;
|-&lt;br /&gt;
| pf_domino.c|| Domino|| PrimFnDomino_EM_YY|| PrimFnMonDomino_EM_YY, PrimFnDydDomino_EM_YY, PrimIdentFnDomino_EM_YY|| PrimProtoFnDomino_EM_YY, PrimProtoFnMixed_EM_YY, ExecuteMagicFunction_EM_YY&lt;br /&gt;
|-&lt;br /&gt;
| pf_dotdot.c|| DotDot|| PrimFnDotDot_EM_YY|| PrimFnMonDotDot_EM_YY, PrimFnDydDotDot_EM_YY, PrimFnDydDotDotNested_EM_YY|| PrimProtoFnDotDot_EM_YY, PrimProtoFnMixed_EM_YY, ExecuteMagicFunction_EM_YY&lt;br /&gt;
|-&lt;br /&gt;
| pf_dshoe.c|| DownShoe|| PrimFnDownShoe_EM_YY|| PrimFnMonDownShoe_EM_YY, PrimFnDydDownShoe_EM_YY, PrimIdentFnDownShoe_EM_YY|| PrimProtoFnDownShoe_EM_YY, PrimProtoFnMixed_EM_YY, PrimFnMonGradeCommon_EM_YY, ExecuteMagicFunction_EM_YY&lt;br /&gt;
|-&lt;br /&gt;
| pf_dstile.c|| DownStile|| PrimFnDownStile_EM_YY|| PrimFnMon_EM_YY, PrimFnDyd_EM_YY|| &lt;br /&gt;
|-&lt;br /&gt;
| pf_dtack.c|| DownTack|| PrimFnDownTack_EM_YY|| PrimFnMonDownTack_EM_YY, PrimFnDydDownTack_EM_YY, PrimIdentFnDownTack_EM_YY|| PrimProtoFnDownTack_EM_YY, PrimProtoFnMixed_EM_YY, PrimFnDydUpTack_EM_YY&lt;br /&gt;
|-&lt;br /&gt;
| pf_dtackjot.c|| DownTackJot|| PrimFnDownTackJot_EM_YY|| PrimFnMonDownTackJot_EM_YY, PrimFnDydDownTackJot_EM_YY, PrimFnDydDownTackJotFBE_EM_YY|| PrimProtoFnDownTackJot_EM_YY, PrimProtoFnMixed_EM_YY&lt;br /&gt;
|-&lt;br /&gt;
| pf_epsilon.c|| Epsilon|| PrimFnEpsilon_EM_YY|| PrimFnMonEpsilon_EM_YY, PrimFnDydEpsilon_EM_YY, PrimFnMonEpsilonGlb_EM_YY, PrimFnMonEpsilonImm_EM_YY|| PrimProtoFnEpsilon_EM_YY, PrimProtoFnMixed_EM_YY, PrimFnMonGradeCommon_EM_YY, PrimFnDydEqualUnderbar_EM_YY&lt;br /&gt;
|-&lt;br /&gt;
| pf_epsund.c|| EpsilonUnderbar|| PrimFnEpsilonUnderbar_EM_YY|| PrimFnMonEpsilonUnderbar_EM_YY, PrimFnDydEpsilonUnderbar_EM_YY|| PrimProtoFnEpsilonUnderbar_EM_YY, PrimProtoFnMixed_EM_YY, PrimFnDydEqualUnderbar_EM_YY, ExecuteMagicFunction_EM_YY&lt;br /&gt;
|-&lt;br /&gt;
| pf_equal.c|| Equal|| PrimFnEqual_EM_YY|| PrimFnDyd_EM_YY, PrimFnMon_EM_YY|| &lt;br /&gt;
|-&lt;br /&gt;
| pf_equalund.c|| EqualUnderbar NotEqualUnderbar|| PrimFnEqualUnderbar_EM_YY, PrimFnNotEqualUnderbar_EM_YY|| PrimFnMonEqualUnderbar_EM_YY, PrimFnDydEqualUnderbar_EM_YY, PrimFnMonNotEqualUnderbar_EM_YY, PrimFnDydNotEqualUnderbar_EM_YY|| PrimProtoFnEqualUnderbar_EM_YY, PrimProtoFnMixed_EM_YY, PrimProtoFnNotEqualUnderbar_EM_YY&lt;br /&gt;
|-&lt;br /&gt;
| pf_index.c|| Assignment|| ArrayIndexRef_EM_YY|| || ArrayIndexRef_EM_YY, ArrayIndexRefLstImm_EM_YY, ArrayIndexRefLstSimpGlb_EM_YY, ArrayIndexRefNamImmed_EM_YY, PrimFnDydSquadGlb_EM_YY, PrimFnMonRightShoe_EM_YY, PrimFnDydRightShoeGlbGlb_EM_YY, ArrayIndexRefRect_EM_YY, ListIndexRef_EM_YY, PrimFnMonLeftShoeGlb_EM_YY, PrimFnMonRho_EM_YY, PrimFnDydRho_EM_YY, ExecFuncStr_EM_YY&lt;br /&gt;
|-&lt;br /&gt;
| pf_iota.c|| Iota|| PrimFnIota_EM_YY|| PrimFnMonIota_EM_YY, PrimFnDydIota_EM_YY, PrimFnMonIotaVector_EM_YY|| PrimProtoFnIota_EM_YY, PrimProtoFnMixed_EM_YY, ExecuteMagicFunction_EM_YY, PrimFnMonGradeCommon_EM_YY, PrimFnDydEqualUnderbar_EM_YY&lt;br /&gt;
|-&lt;br /&gt;
| pf_iotaund.c|| IotaUnderbar|| PrimFnIotaUnderbar_EM_YY|| PrimFnMonIotaUnderbar_EM_YY, PrimFnDydIotaUnderbar_EM_YY|| PrimProtoFnIotaUnderbar_EM_YY, PrimProtoFnMixed_EM_YY, ExecuteMagicFunction_EM_YY&lt;br /&gt;
|-&lt;br /&gt;
| pf_lcaret.c|| LeftCaret|| PrimFnLeftCaret_EM_YY|| PrimFnDyd_EM_YY, PrimFnMon_EM_YY|| &lt;br /&gt;
|-&lt;br /&gt;
| pf_lcaretund.c|| LeftCaretUnderbar|| PrimFnLeftCaretUnderbar_EM_YY|| PrimFnDyd_EM_YY, PrimFnMon_EM_YY|| &lt;br /&gt;
|-&lt;br /&gt;
| pf_lshoe.c|| LeftShoe|| PrimFnLeftShoe_EM_YY|| PrimFnMonLeftShoe_EM_YY, PrimFnDydLeftShoe_EM_YY, PrimFnMonLeftShoeGlb_EM_YY, PrimFnMonLeftShoeCon_EM_YY, PrimFnDydLeftShoeGlb_EM_YY|| PrimProtoFnLeftShoe_EM_YY, PrimProtoFnMixed_EM_YY&lt;br /&gt;
|-&lt;br /&gt;
| pf_lshoeund.c|| LeftShoeUnderbar|| PrimFnLeftShoeUnderbar_EM_YY|| PrimFnMonLeftShoeUnderbar_EM_YY, PrimFnDydLeftShoeUnderbar_EM_YY|| PrimProtoFnLeftShoeUnderbar_EM_YY, PrimProtoFnMixed_EM_YY, ExecuteMagicFunction_EM_YY&lt;br /&gt;
|-&lt;br /&gt;
| pf_ltack.c|| LeftTack|| PrimFnLeftTack_EM_YY|| PrimFnMonLeftTack_EM_YY, PrimFnDydLeftTack_EM_YY|| PrimProtoFnLeftTack_EM_YY, PrimProtoFnMixed_EM_YY&lt;br /&gt;
|-&lt;br /&gt;
| pf_ndcaret.c|| DownCaretTilde|| PrimFnDownCaretTilde_EM_YY|| PrimFnDyd_EM_YY, PrimFnMon_EM_YY|| &lt;br /&gt;
|-&lt;br /&gt;
| pf_nequal.c|| NotEqual|| PrimFnNotEqual_EM_YY|| PrimFnDyd_EM_YY, PrimFnMon_EM_YY|| &lt;br /&gt;
|-&lt;br /&gt;
| pf_nucaret.c|| UpCaretTilde|| PrimFnUpCaretTilde_EM_YY|| PrimFnDyd_EM_YY, PrimFnMon_EM_YY|| &lt;br /&gt;
|-&lt;br /&gt;
| pf_pi.c|| Pi|| PrimFnPi_EM_YY|| PrimFnMonPi_EM_YY, PrimFnDydPi_EM_YY|| PrimProtoFnPi_EM_YY, PrimProtoFnScalar_EM_YY, PrimProtoFnMixed_EM_YY&lt;br /&gt;
|-&lt;br /&gt;
| pf_plus.c|| Plus|| PrimFnPlus_EM_YY|| PrimFnMon_EM_YY, PrimFnDyd_EM_YY|| &lt;br /&gt;
|-&lt;br /&gt;
| pf_qdot.c|| QuoteDot|| PrimFnQuoteDot_EM_YY|| PrimFnMon_EM_YY, PrimFnDyd_EM_YY|| &lt;br /&gt;
|-&lt;br /&gt;
| pf_query.c|| Query|| PrimFnQuery_EM_YY|| PrimFnDydQuery_EM_YY|| PrimFnMon_EM_YY, PrimProtoFnQuery_EM_YY, PrimProtoFnScalar_EM_YY, PrimProtoFnMixed_EM_YY&lt;br /&gt;
|-&lt;br /&gt;
| pf_rcaret.c|| RightCaret|| PrimFnRightCaret_EM_YY|| PrimFnMonRightCaret_EM_YY|| PrimFnDyd_EM_YY&lt;br /&gt;
|-&lt;br /&gt;
| pf_rcaretund.c|| RightCaretUnderbar|| PrimFnRightCaretUnderbar_EM_YY|| PrimFnDyd_EM_YY, PrimFnMon_EM_YY|| &lt;br /&gt;
|-&lt;br /&gt;
| pf_rho.c|| Rho|| PrimFnRho_EM_YY|| PrimFnMonRho_EM_YY, PrimFnDydRho_EM_YY, PrimIdentFnRho_EM_YY, PrimFnMonRhoGlb_EM_YY, PrimFnMonRhoCon_EM_YY|| PrimProtoFnRho_EM_YY, PrimProtoFnMixed_EM_YY&lt;br /&gt;
|-&lt;br /&gt;
| pf_root.c|| Root|| PrimFnRoot_EM_YY|| PrimFnMon_EM_YY, PrimFnDyd_EM_YY|| &lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoe.c|| RightShoe|| PrimFnRightShoe_EM_YY|| PrimFnMonRightShoe_EM_YY, PrimFnDydRightShoe_EM_YY, PrimIdentFnRightShoe_EM_YY, PrimFnMonRightShoeGlb_EM_YY, PrimFnMonRightShoeCon_EM_YY, PrimFnDydRightShoeGlb_EM_YY, PrimFnDydRightShoeImm_EM_YY, PrimFnDydRightShoeImmGlb_EM_YY, PrimFnDydRightShoeGlbGlb_EM_YY|| PrimProtoFnRightShoe_EM_YY, PrimProtoFnMixed_EM_YY, PrimFnDydCircleSlope_EM_YY&lt;br /&gt;
|-&lt;br /&gt;
| pf_rshoeund.c|| RightShoeUnderbar|| PrimFnRightShoeUnderbar_EM_YY|| PrimFnMonRightShoeUnderbar_EM_YY, PrimFnDydRightShoeUnderbar_EM_YY|| PrimProtoFnRightShoeUnderbar_EM_YY, PrimProtoFnMixed_EM_YY, ExecuteMagicFunction_EM_YY&lt;br /&gt;
|-&lt;br /&gt;
| pf_rtack.c|| RightTack|| PrimFnRightTack_EM_YY|| PrimFnMonRightTack_EM_YY, PrimFnDydRightTack_EM_YY|| PrimProtoFnRightTack_EM_YY, PrimProtoFnMixed_EM_YY, PrimFnDydUpTack_EM_YY, PrimFnDydDownTack_EM_YY&lt;br /&gt;
|-&lt;br /&gt;
| pf_section.c|| Section|| PrimFnSection_EM_YY|| PrimFnMonSection_EM_YY, PrimFnDydSection_EM_YY, PrimIdentFnSection_EM_YY|| PrimProtoFnSection_EM_YY, PrimProtoFnMixed_EM_YY, ExecuteMagicFunction_EM_YY&lt;br /&gt;
|-&lt;br /&gt;
| pf_slash.c|| Slash|| PrimFnSlash_EM_YY|| PrimFnMonSlash_EM_YY, PrimFnDydSlash_EM_YY|| PrimProtoFnSlash_EM_YY, PrimProtoFnMixed_EM_YY&lt;br /&gt;
|-&lt;br /&gt;
| pf_slope.c|| Slope|| PrimFnSlope_EM_YY|| PrimFnMonSlope_EM_YY, PrimFnDydSlope_EM_YY|| PrimProtoFnSlope_EM_YY, PrimProtoFnMixed_EM_YY&lt;br /&gt;
|-&lt;br /&gt;
| pf_squad.c|| Squad|| PrimFnSquad_EM_YY|| PrimFnMonSquad_EM_YY, PrimFnDydSquad_EM_YY, PrimIdentFnSquad_EM_YY, PrimFnDydSquadGlb_EM_YY|| PrimProtoFnSquad_EM_YY, PrimProtoFnMixed_EM_YY, PrimFnMonRho_EM_YY, ArrayIndexRef_EM_YY, PrimFnMonIota_EM_YY&lt;br /&gt;
|-&lt;br /&gt;
| pf_star.c|| Star|| PrimFnStar_EM_YY|| PrimFnMon_EM_YY, PrimFnDyd_EM_YY|| &lt;br /&gt;
|-&lt;br /&gt;
| pf_stile.c|| Stile|| PrimFnStile_EM_YY|| PrimFnMon_EM_YY, PrimFnDyd_EM_YY|| &lt;br /&gt;
|-&lt;br /&gt;
| pf_tilde.c|| Tilde|| PrimFnTilde_EM_YY|| PrimFnDydTilde_EM_YY, PrimIdentFnTilde_EM_YY|| PrimFnMon_EM_YY, PrimFnDyd_EM_YY, PrimProtoFnTilde_EM_YY, PrimProtoFnScalar_EM_YY, PrimProtoFnMixed_EM_YY, PrimFnDydEpsilon_EM_YY, PrimFnDydSlash_EM_YY&lt;br /&gt;
|-&lt;br /&gt;
| pf_times.c|| Times|| PrimFnTimes_EM_YY|| PrimFnMon_EM_YY, PrimFnDyd_EM_YY|| &lt;br /&gt;
|-&lt;br /&gt;
| pf_uarrow.c|| UpArrow|| PrimFnUpArrow_EM_YY|| PrimFnMonUpArrow_EM_YY, PrimFnDydUpArrow_EM_YY, PrimIdentFnUpArrow_EM_YY|| PrimProtoFnUpArrow_EM_YY, PrimProtoFnMixed_EM_YY, PrimFnMonRho_EM_YY, ArrayIndexRef_EM_YY&lt;br /&gt;
|-&lt;br /&gt;
| pf_ucaret.c|| UpCaret|| PrimFnUpCaret_EM_YY|| PrimFnDyd_EM_YY, PrimFnMon_EM_YY|| &lt;br /&gt;
|-&lt;br /&gt;
| pf_ushoe.c|| UpShoe|| PrimFnUpShoe_EM_YY|| PrimFnMonUpShoe_EM_YY, PrimFnDydUpShoe_EM_YY|| PrimProtoFnUpShoe_EM_YY, PrimProtoFnMixed_EM_YY, ExecuteMagicFunction_EM_YY&lt;br /&gt;
|-&lt;br /&gt;
| pf_ustile.c|| UpStile|| PrimFnUpStile_EM_YY|| PrimFnMon_EM_YY, PrimFnDyd_EM_YY|| &lt;br /&gt;
|-&lt;br /&gt;
| pf_utack.c|| UpTack|| PrimFnUpTack_EM_YY|| PrimFnMonUpTack_EM_YY, PrimFnDydUpTack_EM_YY|| PrimProtoFnUpTack_EM_YY, PrimProtoFnMixed_EM_YY&lt;br /&gt;
|-&lt;br /&gt;
| pf_utackjot.c|| UpTackJot|| PrimFnUpTackJot_EM_YY|| PrimFnMonUpTackJot_EM_YY, PrimFnDydUpTackJot_EM_YY, PrimFnMonUpTackJotImm_EM_YY, PrimFnMonUpTackJotGlb_EM_YY, PrimFnMonUpTackJotCommon_EM_YY|| PrimProtoFnUpTackJot_EM_YY, PrimProtoFnMixed_EM_YY, PrimFnMonUpTackGlb_EM_YY&lt;br /&gt;
|-&lt;br /&gt;
|}&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr width=85%&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==General Reference Notes==&lt;br /&gt;
&lt;br /&gt;
Notation Convention on this wiki page: &amp;lt;u&amp;gt;Unless otherwise specified&amp;lt;/u&amp;gt; all file names used on this page will &#039;&#039;&#039;exclude their path&#039;&#039;&#039; which is &#039;&#039;&#039;C:\NARS2000\trunk\&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Every programming language uses at least two primary concepts 1) mnemonics and 2) a syntax to implement that language.  NARS is no different.  Every NARS quad system command has an associated mnemonic or reference name.  For example, Quad CR or &amp;lt;apll&amp;gt;{quad}&amp;lt;/apll&amp;gt; [[System Function CR|CR]] - Canononical Representation - uses mnemonic &#039;&#039;&#039;SysFnCR_EM_YY&#039;&#039;&#039;, as found in its definition file qf_cr.c.  Quad FX or &amp;lt;apll&amp;gt;{quad}&amp;lt;/apll&amp;gt; [[System Function FX|FX]] - Fix or Function eXecute - uses mnemonic &#039;&#039;&#039;SysFnFX_EM_YY&#039;&#039;&#039;, per file qf_fx.c.  Note the similarity in file naming conventions for both c files.&lt;br /&gt;
&lt;br /&gt;
Several Quad functions have been implemented using PHP magic functions, for example Quad VR or &amp;lt;apll&amp;gt;{quad}&amp;lt;/apll&amp;gt; [[System Function VR|VR]] - Visual Representation - uses mnemonic &#039;&#039;&#039;SysFnVR_EM_YY&#039;&#039;&#039;, per definition file qf_vr.c.  However, Quad [[System Function VR|VR]] also has an additional PHP magic header file called in this case mf_quadvr.h.  Quad FMT is similarly coded using a PHP magic function header file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:NARS 2000]]&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Category:Features&amp;diff=3637</id>
		<title>Category:Features</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Category:Features&amp;diff=3637"/>
		<updated>2019-10-13T21:21:37Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: new&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Features of APL as provided by NARS 2000.&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Consistent_Extensions_in_NARS2000&amp;diff=3636</id>
		<title>Consistent Extensions in NARS2000</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Consistent_Extensions_in_NARS2000&amp;diff=3636"/>
		<updated>2019-10-13T21:20:13Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: /* Session Manager */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The following features are considered consistent extensions to the Extended APL Standard in that they replace error-producing behavior with non-error-producing behavior.  Note that Extended APL Standard wants you to know that the use of a consistent extension prevents a program from conforming with the Standard.&lt;br /&gt;
&lt;br /&gt;
== Language Features ==&lt;br /&gt;
* [[Sink]]:  monadic left arrow (&amp;lt;apll&amp;gt;←R&amp;lt;/apll&amp;gt;) suppresses the display of &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt;.&lt;br /&gt;
* [[Indexing|Unified index reference, assignment, and modify assignment]] (&amp;lt;apll&amp;gt;R[L]&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;R[L]←A&amp;lt;/apll&amp;gt;, and &amp;lt;apll&amp;gt;R[L]&amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt;←A&amp;lt;/apll&amp;gt;):  these three forms all allow both Reach and Scatter indexing — that is,&lt;br /&gt;
** if &amp;lt;apll&amp;gt;L⊃R&amp;lt;/apll&amp;gt; is valid, it is equivalent to &amp;lt;apll&amp;gt;⊃R[⊂L]&amp;lt;/apll&amp;gt;, and&lt;br /&gt;
** if &amp;lt;apll&amp;gt;L⊃¨⊂R&amp;lt;/apll&amp;gt; is valid, it is equivalent to &amp;lt;apll&amp;gt;R[L]&amp;lt;/apll&amp;gt;, and&lt;br /&gt;
** if &amp;lt;apll&amp;gt;L⌷R&amp;lt;/apll&amp;gt; is valid, it is equivalent to &amp;lt;apll&amp;gt;R[⊃∘.,/L]&amp;lt;/apll&amp;gt;, and&lt;br /&gt;
** if &amp;lt;apll&amp;gt;L⌷¨⊂R&amp;lt;/apll&amp;gt; is valid, it is equivalent to &amp;lt;apll&amp;gt;⊂¨R[⊂¨L]&amp;lt;/apll&amp;gt;&lt;br /&gt;
:Reach and Scatter indexing may appear together within a single instance of &amp;lt;apll&amp;gt;R[L]&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;R[L]←A&amp;lt;/apll&amp;gt;, and &amp;lt;apll&amp;gt;R[L]&amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt;←A&amp;lt;/apll&amp;gt;.&lt;br /&gt;
* [[Rank|Dyadic operator dieresis-jot]] (&amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt;⍤[X] Y&amp;lt;/apll&amp;gt;) (rank) is used to apply a function to (monadic) or between (dyadic) cells of the argument(s).&lt;br /&gt;
* [[Compose|Dyadic operator jot]] (&amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt;∘&amp;lt;i&amp;gt;g&amp;lt;/i&amp;gt;&amp;lt;/apll&amp;gt;) (compose) is used to join two functions or a function and a variable to produce a derived function (e.g., &amp;lt;apll&amp;gt;,∘⍋∘⍋∘,&amp;lt;/apll&amp;gt;) which is applied as a single function.  For example, the function &amp;lt;apll&amp;gt;*∘2&amp;lt;/apll&amp;gt; when applied monadically, squares its argument.&lt;br /&gt;
* [[Null|Monadic operator null]] (&amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt;⊙&amp;lt;/apll&amp;gt;):  To aid in resolving ambiguities with slash/slope as function/operator, use this operator.  It passes through all functions as functions, and forces the symbols slash/slope to be functions rather than operators.  For example, use &amp;lt;apll&amp;gt;(/⊙)/3 4&amp;lt;/apll&amp;gt; instead of &amp;lt;apll&amp;gt;(/)/3 4&amp;lt;/apll&amp;gt;.&lt;br /&gt;
* [[Partitioned_Enclose|Partitioned Enclose]] (&amp;lt;apll&amp;gt;L⊂[X] R&amp;lt;/apll&amp;gt;):  Partition &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; along the &amp;lt;apll&amp;gt;X&amp;lt;/apll&amp;gt; axis according to &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt;.&lt;br /&gt;
* [[Index_Generator|Monadic iota]] (&amp;lt;apll&amp;gt;⍳R&amp;lt;/apll&amp;gt;) extended to negative indices.  For example, in origin-0, &amp;lt;apll&amp;gt;⍳¯3&amp;lt;/apll&amp;gt; returns &amp;lt;apll&amp;gt;¯3 ¯2 ¯1&amp;lt;/apll&amp;gt;.&lt;br /&gt;
* [[Index_Generator|Monadic iota]] (&amp;lt;apll&amp;gt;⍳R&amp;lt;/apll&amp;gt;) extended to length &amp;gt; 1 vector right arguments returns an array of indices whose shape is that of the right argument.&lt;br /&gt;
* [[Index_Of|Dyadic iota]] (&amp;lt;apll&amp;gt;L⍳R&amp;lt;/apll&amp;gt;) extended to rank &amp;gt; 1 left arguments returns an array of vector indices to the left argument.&lt;br /&gt;
* [[Indexing|Index reference, assignment, modify assignment, squad, transpose, pick, and the axis operator]] (&amp;lt;apll&amp;gt;R[L]&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;R[L]←A&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;R[L]&amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt;←A&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;L⌷R&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;L⍉R&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;L⊃R&amp;lt;/apll&amp;gt;, and &amp;lt;apll&amp;gt;&amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt;[L]&amp;lt;/apll&amp;gt;) are each extended to negative values in &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt;.  That is, if the largest allowed value is &amp;lt;apll&amp;gt;N&amp;lt;/apll&amp;gt;, then the allowable range for the values in &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt;  is &amp;lt;apll&amp;gt;1 ¯1[1]-N&amp;lt;/apll&amp;gt; to &amp;lt;apll&amp;gt;N&amp;lt;/apll&amp;gt;, inclusive.  For example, &amp;lt;apll&amp;gt;A&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;A[⍳⍴A]&amp;lt;/apll&amp;gt;, and &amp;lt;apll&amp;gt;A[⍳-⍴A]&amp;lt;/apll&amp;gt; are all identical for any array &amp;lt;apll&amp;gt;A&amp;lt;/apll&amp;gt; in either origin, as are &amp;lt;apll&amp;gt;A&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;(⍳⍴⍴A)⍉A&amp;lt;/apll&amp;gt;, and &amp;lt;apll&amp;gt;(⍳-⍴⍴A)⍉A&amp;lt;/apll&amp;gt;.&lt;br /&gt;
* [[Matrix_Inverse/Divide|Monadic and dyadic domino]] (&amp;lt;apll&amp;gt;⌹R&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;L⌹R&amp;lt;/apll&amp;gt;) — matrix inverse/divide extended to use Moore-Penrose pseudo-inverse algorithm via Singular Value Decomposition.&lt;br /&gt;
* Prototypes for all primitive functions and operators.&lt;br /&gt;
* Jot may be used as either operand to a user-defined operator in which case the name associated with the jot inside the operator is undefined, that is, &amp;lt;apll&amp;gt;⎕NC&amp;lt;/apll&amp;gt; on the name returns &amp;lt;apll&amp;gt;0&amp;lt;/apll&amp;gt;.&lt;br /&gt;
* Generalized Identity Functions for reduction and inner product.&lt;br /&gt;
* [[Scalar_System_Variables|Out of range numeric assignments]] to one of these system variables (&amp;lt;apll&amp;gt;⎕CT&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;⎕DT&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;⎕FPC&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;⎕IC&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;⎕IO&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;⎕PP&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;⎕PW&amp;lt;/apll&amp;gt;, or &amp;lt;apll&amp;gt;⎕RL&amp;lt;/apll&amp;gt;) is set to the value in the allowable range nearest the ceiling of the given number. For example, if &amp;lt;apll&amp;gt;⎕FPC&amp;lt;/apll&amp;gt; is set to &amp;lt;apll&amp;gt;23.7&amp;lt;/apll&amp;gt;, that value is rounded up to &amp;lt;apll&amp;gt;53&amp;lt;/apll&amp;gt;, the smallest value that system variable may assume.&lt;br /&gt;
* [[Scalar_System_Variables|Assigning a simple empty vector]] to one of these system variables (&amp;lt;apll&amp;gt;⎕CT&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;⎕DT&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;⎕FPC&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;⎕IC&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;⎕IO&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;⎕PP&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;⎕PW&amp;lt;/apll&amp;gt;, or &amp;lt;apll&amp;gt;⎕RL&amp;lt;/apll&amp;gt;) assigns the system default value to the variable.&lt;br /&gt;
* [[Find]]: dyadic epsilon underbar (&amp;lt;apll&amp;gt;L⍷R&amp;lt;/apll&amp;gt;) using the Knuth-Morris-Pratt string searching algorithm.&lt;br /&gt;
* [[Reshape]]: (&amp;lt;apll&amp;gt;L⍴R&amp;lt;/apll&amp;gt;) is extended to allow a non-empty Reshape of an empty in which case the right argument fill element is used, e.g., &amp;lt;apll&amp;gt;2 3⍴⍬&amp;lt;/apll&amp;gt;.&lt;br /&gt;
* [[Mismatch]]: Primitive dyadic not equal underbar (&amp;lt;apll&amp;gt;L≢R&amp;lt;/apll&amp;gt;) equivalent to &amp;lt;apll&amp;gt;~L≡R&amp;lt;/apll&amp;gt;.&lt;br /&gt;
* [[Tally]]: Primitive monadic not equal underbar (&amp;lt;apll&amp;gt;≢R&amp;lt;/apll&amp;gt;) which is equivalent to &amp;lt;apll&amp;gt;⍬⍴(⍴R),1&amp;lt;/apll&amp;gt;.&lt;br /&gt;
* [[Indices]]: Primitive monadic iota underbar (&amp;lt;apll&amp;gt;⍸R&amp;lt;/apll&amp;gt;) which is equivalent to &amp;lt;apll&amp;gt;(,R)/,⍳⍴1/R&amp;lt;/apll&amp;gt;.&lt;br /&gt;
* [[Array Lookup]]: Primitive dyadic iota underbar (&amp;lt;apll&amp;gt;L⍸R&amp;lt;/apll&amp;gt;) which for matrices looks up the rows of &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; in the rows of &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt;.  In general, this function looks up the trailing subarrays of &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; in the vector of trailing subarrays of &amp;lt;apll&amp;gt;L&amp;lt;/apll&amp;gt;, and is equivalent to &amp;lt;apll&amp;gt;(⊂⍤¯1 L)⍳⊂⍤(¯1+⍴⍴L) R&amp;lt;/apll&amp;gt;.&lt;br /&gt;
* [[Type]]: Primitive monadic function down tack (&amp;lt;apll&amp;gt;⊤R&amp;lt;/apll&amp;gt;) (Type).&lt;br /&gt;
* [[Composition]]: Primitive dyadic operator dieresis circle (&amp;lt;apll&amp;gt;L f⍥g R&amp;lt;/apll&amp;gt;) (Composition).&lt;br /&gt;
* [[Root]]: Primitive monadic and dyadic functions (&amp;lt;apll&amp;gt;√R&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;L√R&amp;lt;/apll&amp;gt;) (Root).&lt;br /&gt;
* [[Sets]]:  Primitive dyadic functions (&amp;lt;apll&amp;gt;L§R&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;L⊆R&amp;lt;/apll&amp;gt;, and &amp;lt;apll&amp;gt;L⊇R&amp;lt;/apll&amp;gt;) (Set functions).&lt;br /&gt;
* [[Primes]]: Primitive monadic and dyadic functions pi (&amp;lt;apll&amp;gt;πR&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;LπR&amp;lt;/apll&amp;gt;) (Prime decomposition and Number-theoretic functions).&lt;br /&gt;
* [[Sequence]]: Primitive dyadic function (&amp;lt;apll&amp;gt;L..R&amp;lt;/apll&amp;gt;) (Sequence).&lt;br /&gt;
* [[Variant]]:  Primitive dyadic operator quad colon (&amp;lt;apll&amp;gt;f⍠V R&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;L f⍠V R&amp;lt;/apll&amp;gt;) (Variant).&lt;br /&gt;
* [[Anonymous Functions/Operators/Hyperators]]: one-line grouping of one or more statements all enclosed in braces such as &amp;lt;apll&amp;gt;{(+⌿⍵)÷≢⍵}&amp;lt;/apll&amp;gt;.&lt;br /&gt;
* [[Determinant]]:  Primitive dyadic operator (&amp;lt;apll&amp;gt;f.g R&amp;lt;/apll&amp;gt;) (Determinant Operator).&lt;br /&gt;
* [[Convolution]]:  Primitive dyadic operator (&amp;lt;apll&amp;gt;L f⍡g R&amp;lt;/apll&amp;gt;) (Convolution Operator).&lt;br /&gt;
&amp;lt;!-- * Selective assignment, e.g. &amp;lt;apll&amp;gt;(1 1⍉M)←0&amp;lt;/apll&amp;gt;. --&amp;gt;&lt;br /&gt;
* New System Variables&lt;br /&gt;
** &amp;lt;apll&amp;gt;⎕DT&amp;lt;/apll&amp;gt; ([[System_Variable_DT|Distribution Type]])&lt;br /&gt;
** &amp;lt;apll&amp;gt;⎕FC&amp;lt;/apll&amp;gt; ([[System_Variable_FC|Format Control]])&lt;br /&gt;
** &amp;lt;apll&amp;gt;⎕FPC&amp;lt;/apll&amp;gt; ([[System_Variable_FPC|Floating Point Control]])&lt;br /&gt;
** &amp;lt;apll&amp;gt;⎕IC&amp;lt;/apll&amp;gt; ([[System_Variable_IC|Indeterminate Control]])&lt;br /&gt;
* New or Changed System Functions&lt;br /&gt;
** &amp;lt;apll&amp;gt;⎕A&amp;lt;/apll&amp;gt; ([[System_Function_A|Uppercase English Alphabet]]) &amp;amp;mdash; returns the 26-character uppercase English alphabet.&lt;br /&gt;
** &amp;lt;apll&amp;gt;⎕AT&amp;lt;/apll&amp;gt; ([[System_Function_AT|Object Attributes]]) &amp;amp;mdash; returns various attributes (Valence, Fix Time, Execution Properties, and Size) of an object&lt;br /&gt;
** &amp;lt;apll&amp;gt;⎕AV&amp;lt;/apll&amp;gt; ([[System_Function_AV|Atomic Vector]]) &amp;amp;mdash; has all UCS-2 Unicode characters (65,536 in length)&lt;br /&gt;
** &amp;lt;apll&amp;gt;L ⎕CR R&amp;lt;/apll&amp;gt; ([[System_Function_CR|Canonical Representation]]) &amp;amp;mdash; &amp;lt;apll&amp;gt;L=1&amp;lt;/apll&amp;gt; (nested vector of character vectors) and &amp;lt;apll&amp;gt;L=2&amp;lt;/apll&amp;gt; (character matrix)&lt;br /&gt;
** &amp;lt;apll&amp;gt;⎕DM&amp;lt;/apll&amp;gt; ([[System_Function_DM|Diagnostic Message]])&lt;br /&gt;
** &amp;lt;apll&amp;gt;⎕DR R&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;L ⎕DR R&amp;lt;/apll&amp;gt; ([[System_Function_DR|Data Representation]])&lt;br /&gt;
** &amp;lt;apll&amp;gt;L ⎕EA R&amp;lt;/apll&amp;gt; ([[System_Function_EA|Execute Alternate]])&lt;br /&gt;
** &amp;lt;apll&amp;gt;⎕EC R&amp;lt;/apll&amp;gt; ([[System_Function_EC|Execute Controlled]])&lt;br /&gt;
** &amp;lt;apll&amp;gt;⎕EM&amp;lt;/apll&amp;gt; ([[System_Function_EM|Event Message]])&lt;br /&gt;
** &amp;lt;apll&amp;gt;⎕ERROR R&amp;lt;/apll&amp;gt; ([[System_Function_ERROR|Signal Error]])&lt;br /&gt;
** &amp;lt;apll&amp;gt;⎕ES R&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;L ⎕ES R&amp;lt;/apll&amp;gt; ([[System_Function_ES|Event Simulate]])&lt;br /&gt;
** &amp;lt;apll&amp;gt;⎕ET&amp;lt;/apll&amp;gt; ([[System_Function_ET|Event Type]])&lt;br /&gt;
** &amp;lt;apll&amp;gt;⎕FMT R&amp;lt;/apll&amp;gt; ([[System Function FMT#Monadic_Function|Format arrays within Boxes]])&lt;br /&gt;
** &amp;lt;apll&amp;gt;L ⎕FMT R&amp;lt;/apll&amp;gt; ([[System Function FMT#Dyadic_Function|Format arrays using Format Phrases]])&lt;br /&gt;
** &amp;lt;apll&amp;gt;⎕MF R&amp;lt;/apll&amp;gt; ([[System_Function_MF|Monitor Function]])&lt;br /&gt;
** &amp;lt;apll&amp;gt;⎕Nxxxx&amp;lt;/apll&amp;gt; ([[System_Function_Native_Files|Native File Functions]])&lt;br /&gt;
** &amp;lt;apll&amp;gt;⎕NC R&amp;lt;/apll&amp;gt; ([[System_Function_NC|Name Class]]) &amp;amp;mdash; returns &amp;lt;apll&amp;gt;21&amp;lt;/apll&amp;gt; through &amp;lt;apll&amp;gt;24&amp;lt;/apll&amp;gt; for System labels, (Unused), Magic functions, and Magic operators.&lt;br /&gt;
** &amp;lt;apll&amp;gt;⎕NL R&amp;lt;/apll&amp;gt; ([[System_Function_NL|Name List]]) &amp;amp;mdash; &amp;lt;apll&amp;gt;R=21&amp;lt;/apll&amp;gt; through &amp;lt;apll&amp;gt;24&amp;lt;/apll&amp;gt; lists System labels, (Unused), Magic functions, and Magic operators.&lt;br /&gt;
** &amp;lt;apll&amp;gt;⎕STOP&amp;lt;/apll&amp;gt; ([[System_Function_STOP|Query/Set STOP Property On Functions]])&lt;br /&gt;
** &amp;lt;apll&amp;gt;⎕SYSID&amp;lt;/apll&amp;gt; ([[System_Function_SYSID|System Identification]])&lt;br /&gt;
** &amp;lt;apll&amp;gt;⎕SYSVER&amp;lt;/apll&amp;gt; ([[System_Function_SYSVER|System Version]])&lt;br /&gt;
** &amp;lt;apll&amp;gt;⎕TC&amp;lt;/apll&amp;gt; and other related &amp;lt;apll&amp;gt;⎕TC&amp;lt;/apll&amp;gt;&#039;&#039;xxx&#039;&#039; ([[System_Function_TC|Terminal Control]])&lt;br /&gt;
** &amp;lt;apll&amp;gt;L ⎕TF R&amp;lt;/apll&amp;gt; ([[System_Function_TF|Transfer Form]]) &amp;amp;mdash; &amp;lt;apll&amp;gt;1=|L&amp;lt;/apll&amp;gt; (Type 1 Transfer Form) and &amp;lt;apll&amp;gt;2=|L&amp;lt;/apll&amp;gt; (Type 2 Transfer Form); &amp;lt;apll&amp;gt;L&amp;amp;lt;0&amp;lt;/apll&amp;gt; interprets &amp;lt;apll&amp;gt;R&amp;lt;/apll&amp;gt; and the result as Unicode characters; &amp;lt;apll&amp;gt;L&amp;amp;gt;0&amp;lt;/apll&amp;gt; interprets them as APL2 characters&lt;br /&gt;
** &amp;lt;apll&amp;gt;⎕TRACE&amp;lt;/apll&amp;gt; ([[System_Function_TRACE|Query/Set TRACE Property On Functions]])&lt;br /&gt;
** &amp;lt;apll&amp;gt;⎕UCS R&amp;lt;/apll&amp;gt; ([[System_Function_UCS|Unicode Character Set]])&lt;br /&gt;
** &amp;lt;apll&amp;gt;⎕VR R&amp;lt;/apll&amp;gt; ([[System Function VR|Visual Representation]])&lt;br /&gt;
** &amp;lt;apll&amp;gt;⎕WA&amp;lt;/apll&amp;gt; ([[System Function WA|Workspace Available]])&lt;br /&gt;
* New Datatypes&lt;br /&gt;
** 2-byte Characters (Unicode, that is, UCS-2)&lt;br /&gt;
** 64-bit Integers&lt;br /&gt;
** APAs (Arithmetic Progression Arrays) (e.g., &amp;lt;apll&amp;gt;2 3 4⍴⍳24&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;1E12⍴1&amp;lt;/apll&amp;gt;)&lt;br /&gt;
** ± Infinity (e.g., &amp;lt;apll&amp;gt;∞&amp;lt;/apll&amp;gt; for infinity and &amp;lt;apll&amp;gt;¯∞&amp;lt;/apll&amp;gt; for negative infinity) — considerable development work needs to be done to this feature to handle the many special cases&lt;br /&gt;
** Rational numbers (e.g., &amp;lt;apll&amp;gt;1r3&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;12345x&amp;lt;/apll&amp;gt;)&lt;br /&gt;
** Variable precision floating point numbers (e.g., &amp;lt;apll&amp;gt;1.234v&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;12v&amp;lt;/apll&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
== Miscellaneous Syntax ==&lt;br /&gt;
* [[Strand_Assignment|Strand Assignment]]:  A sequence of names enclosed in parentheses can be assigned to.  For example, &amp;lt;apll&amp;gt;(A B)←1 2&amp;lt;/apll&amp;gt; is the same as &amp;lt;apll&amp;gt;A←1&amp;lt;/apll&amp;gt; followed by &amp;lt;apll&amp;gt;B←2&amp;lt;/apll&amp;gt;.&lt;br /&gt;
* [[Modified_Assignment|Modified Assignment]]:  An arbitrary (primitive or user-defined) dyadic function may appear immediately to the left of an assignment arrow.  For example, &amp;lt;apll&amp;gt;A&amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt;←1&amp;lt;/apll&amp;gt; is the same as &amp;lt;apll&amp;gt;A←A&amp;lt;i&amp;gt;f¨&amp;lt;/i&amp;gt; 1&amp;lt;/apll&amp;gt;, and &amp;lt;apll&amp;gt;A[L]&amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt;←1&amp;lt;/apll&amp;gt; is the same as &amp;lt;apll&amp;gt;A[L]←A[L]&amp;lt;i&amp;gt;f¨&amp;lt;/i&amp;gt; 1&amp;lt;/apll&amp;gt;.&lt;br /&gt;
* [[Modify_Strand_Assignment|Modify Strand Assignment]]:  An arbitrary (primitive or user-defined) dyadic function may appear immediately to the left of the assignment arrow used in Strand Assignment (e.g. &amp;lt;apll&amp;gt;(A B)&amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt;←1 2&amp;lt;/apll&amp;gt; is the same as &amp;lt;apll&amp;gt;A←A&amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt; 1&amp;lt;/apll&amp;gt; followed by &amp;lt;apll&amp;gt;B←B&amp;lt;i&amp;gt;f&amp;lt;/i&amp;gt; 2&amp;lt;/apll&amp;gt;).&lt;br /&gt;
* [[Function/Operator/Hyperator_Assignment|Function/operator/hyperator assignment]]:  A primitive function, operator, or derived function may be assigned to any available name (e.g., &amp;lt;apll&amp;gt;F←⍋&amp;lt;/apll&amp;gt;, or &amp;lt;apll&amp;gt;F←¨&amp;lt;/apll&amp;gt;, or &amp;lt;apll&amp;gt;F←∘&amp;lt;/apll&amp;gt;, or &amp;lt;apll&amp;gt;F←+.×&amp;lt;/apll&amp;gt;).&lt;br /&gt;
* [[Axis|Axis operator with primitive scalar dyadic functions]]:   The axis operator indicates how the coordinates of the lower rank argument map to the coordinates of the higher rank argument.  For example, &amp;lt;apll&amp;gt;(1 2+[1] 2 3⍴R&amp;lt;/apll&amp;gt; is equivalent to &amp;lt;apll&amp;gt;(⍉3 2⍴1 2)+2 3⍴R&amp;lt;/apll&amp;gt;.&lt;br /&gt;
* [[Axis|Axis operator with primitive scalar dyadic functions]]:  The order of the values in the axis operator brackets is significant.  For example, &amp;lt;apll&amp;gt;(2 3⍴L)+[1 2] 2 3 4⍴R&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;(⍉2 3⍴L)+[2 1] 2 3 4⍴R&amp;lt;/apll&amp;gt; are identical.&lt;br /&gt;
* [[Axis|Axis operator with the dyadic derived function from the Each operator]]:  As with primitive scalar dyadic functions, the axis operator indicates how the coordinates of the lower rank argument map to the coordinates of the higher rank argument.  For example,  &amp;lt;apll&amp;gt;(2 3⍴L)⍴¨[1 2] 2 3 4⍴R&amp;lt;/apll&amp;gt; is equivalent to &amp;lt;apll&amp;gt;(3 1 2⍉4⌿1 2 3⍴L)⍴¨2 3 4⍴R&amp;lt;/apll&amp;gt;.&lt;br /&gt;
* [[Axis|Axis operator to Ravel]]:  The order of the values in the axis operator brackets is significant, and may transpose coordinates in the right argument before mapping the values to the result.  For example, &amp;lt;apll&amp;gt;,[2 1] R&amp;lt;/apll&amp;gt; and &amp;lt;apll&amp;gt;,[1 2] R&amp;lt;/apll&amp;gt; are both valid and have the same shape and values but, in general, the values are in a different order.&lt;br /&gt;
* [[Axis|Axis operator with user-defined functions/operators/hyperators]]:  A user-defined function/operator/hyperator may be sensitive to the axis operator in the same way various primitive functions and operators are.  For example, &amp;lt;apll&amp;gt;FOO[2 3] R&amp;lt;/apll&amp;gt; is valid if the function header is defined as &amp;lt;apll&amp;gt;∇ Z←FOO[X] R&amp;lt;/apll&amp;gt;.&lt;br /&gt;
* [[Axis|Axis operator values may be negative]]:  That is, if the largest allowed value is &amp;lt;apll&amp;gt;N&amp;lt;/apll&amp;gt;, then the allowable range for axis operator values is &amp;lt;apll&amp;gt;1 ¯1[1]-N&amp;lt;/apll&amp;gt; to &amp;lt;apll&amp;gt;N&amp;lt;/apll&amp;gt;, inclusive.&lt;br /&gt;
* [[User-Defined_Functions/Operators/Hyperators|Strand left and right arguments and result to user-defined functions/operators]] along with optional left argument may be specified:  For example, a strand right argument may be specified as &amp;lt;apll&amp;gt;∇ Z←FOO (R&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; R&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; R&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; R&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt;)&amp;lt;/apll&amp;gt; or, more fully, with a non-displayable result and strands used in all of the result, left, and right arguments with an optional left argument may be specified as &amp;lt;apll&amp;gt;∇ (Z&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; Z&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)←{L&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; L&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; L&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;} (LO OP2[X] RO) (R&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; R&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt; R&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt; R&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt;)&amp;lt;/apll&amp;gt;.&lt;br /&gt;
* Note that braces are &#039;&#039;&#039;required&#039;&#039;&#039; to surround the left argument of an ambivalent function as in &amp;lt;apll&amp;gt;∇ Z←{L} FOO R&amp;lt;/apll&amp;gt;.&lt;br /&gt;
* [[User-Defined_Functions/Operators/Hyperators|The result of a user-defined function/operator/hyperator]] may be marked as non-displayable by enclosing it in braces, as in &amp;lt;apll&amp;gt;∇ {Z}←FOO R&amp;lt;/apll&amp;gt;. If the result part of the header consists of multiple names, either &amp;lt;apll&amp;gt;∇ {Z&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; Z&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;}←FOO R&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;∇ ({Z&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; Z&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;})←FOO R&amp;lt;/apll&amp;gt; or &amp;lt;apll&amp;gt;∇ {(Z&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt; Z&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;)}←FOO R&amp;lt;/apll&amp;gt; may be used to mark the result as non-displayable.&lt;br /&gt;
* [[Control_Structures|Control structures]] on one line or split across multiple lines (e.g., &amp;lt;apll&amp;gt;:for I :in ⍳N ⋄ ... ⋄ :endfor&amp;lt;/apll&amp;gt;).&lt;br /&gt;
* [[Point_Notation|Point Notation]] (&amp;lt;b&amp;gt;Base&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;Euler&amp;lt;/b&amp;gt;, &amp;lt;b&amp;gt;Pi&amp;lt;/b&amp;gt;, and &amp;lt;b&amp;gt;Gamma&amp;lt;/b&amp;gt;) are extensions to the familiar &amp;lt;b&amp;gt;Decimal&amp;lt;/b&amp;gt; and &amp;lt;b&amp;gt;Exponential&amp;lt;/b&amp;gt; Point Notation for entering numeric constants.  For example, the numeric constant &amp;lt;apll&amp;gt;16bffff&amp;lt;/apll&amp;gt; is a shorthand for calculating &amp;lt;apll&amp;gt;16⊥15 15 15 15&amp;lt;/apll&amp;gt;.&lt;br /&gt;
* [[Trains]]:  e.g., &amp;lt;apll&amp;gt;avg←(+⌿ ÷ ≢)&amp;lt;/apll&amp;gt; applies the functions to its argument(s) in a particular way (in this case, to compute the average of a numeric vector).&lt;br /&gt;
* [[System Labels]]:  &amp;lt;apll&amp;gt;⎕PRO&amp;lt;/apll&amp;gt;, &amp;lt;apll&amp;gt;⎕ID&amp;lt;/apll&amp;gt;, and &amp;lt;apll&amp;gt;⎕MS&amp;lt;/apll&amp;gt; in user-defined functions/operators.&lt;br /&gt;
&lt;br /&gt;
== System commands ==&lt;br /&gt;
* [[System Command CLOSE|&amp;lt;apll&amp;gt;)CLOSE&amp;lt;/apll&amp;gt;]]&lt;br /&gt;
* [[System Command COPY|&amp;lt;apll&amp;gt;)COPY&amp;lt;/apll&amp;gt;]]&lt;br /&gt;
* [[System Command EDIT|&amp;lt;apll&amp;gt;)EDIT&amp;lt;/apll&amp;gt;]]&lt;br /&gt;
* [[System Command EXIT|&amp;lt;apll&amp;gt;)EXIT&amp;lt;/apll&amp;gt;]]&lt;br /&gt;
* [[System Command IN|&amp;lt;apll&amp;gt;)IN&amp;lt;/apll&amp;gt;]]&lt;br /&gt;
* [[System Command INASCII|&amp;lt;apll&amp;gt;)INASCII&amp;lt;/apll&amp;gt;]]&lt;br /&gt;
* [[System Command NEWTAB|&amp;lt;apll&amp;gt;)NEWTAB&amp;lt;/apll&amp;gt;]]&lt;br /&gt;
* [[System Command EXIT|&amp;lt;apll&amp;gt;)OFF&amp;lt;/apll&amp;gt;]]&lt;br /&gt;
* [[System Command OUT|&amp;lt;apll&amp;gt;)OUT&amp;lt;/apll&amp;gt;]]&lt;br /&gt;
* [[System Command RESET|&amp;lt;apll&amp;gt;)RESET&amp;lt;/apll&amp;gt;]]&lt;br /&gt;
* [[System Command ULIB|&amp;lt;apll&amp;gt;)ULIB&amp;lt;/apll&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
== Session Manager ==&lt;br /&gt;
* [[Function_Editing|Function editor]]:  this feature may be invoked by typing &amp;lt;apll&amp;gt;∇&amp;lt;/apll&amp;gt; by itself, or &amp;lt;apll&amp;gt;∇&amp;lt;/apll&amp;gt; followed by a name, or &amp;lt;apll&amp;gt;)EDIT&amp;lt;/apll&amp;gt; by itself, or &amp;lt;apll&amp;gt;)EDIT&amp;lt;/apll&amp;gt; followed by a name, or by double-right-clicking on a function name in the session manager or function editor windows&lt;br /&gt;
* [[Session_Manager|Multiple workspaces]] may be open at the same time and switched between via Tabs&lt;br /&gt;
* [[Initialization_and_Workspace_Files#Workspace_Files|Workspaces]] are saved as plain text ASCII files&lt;br /&gt;
* All variable names are two-byte characters (Unicode, that is, UCS-2)&lt;br /&gt;
* Array rank and dimension limit of 64 bits&lt;br /&gt;
* [[Session_Manager|Multilevel Undo]] in function editing&lt;br /&gt;
* Undo buffer saved with function for reuse on next edit&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Features]]&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=C_Source_Code_Conventions_and_Abbreviations_Dictionary&amp;diff=3635</id>
		<title>C Source Code Conventions and Abbreviations Dictionary</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=C_Source_Code_Conventions_and_Abbreviations_Dictionary&amp;diff=3635"/>
		<updated>2019-10-13T21:17:39Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: t/c&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;&amp;lt;big&amp;gt;NARS C &amp;lt;u&amp;gt;Source Code&amp;lt;/u&amp;gt; Conventions and Abbreviations Dictionary:&amp;lt;/big&amp;gt;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Conventions==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 50%&amp;quot;&lt;br /&gt;
! Convention&lt;br /&gt;
! Syntax&lt;br /&gt;
! Description/Where Used&lt;br /&gt;
! Sample Use&lt;br /&gt;
! Purpose&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PrimFn&#039;&#039;&#039;&lt;br /&gt;
| Prefix &lt;br /&gt;
| name prefix to all Primary APL functions&lt;br /&gt;
| &#039;&#039;&#039;PrimFn&#039;&#039;&#039;Rho_EM_YY&lt;br /&gt;
| Quickly identify such names&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SysFn&#039;&#039;&#039;&lt;br /&gt;
| Prefix&lt;br /&gt;
| name prefix to all Quad type System Functions&lt;br /&gt;
| &#039;&#039;&#039;SysFn&#039;&#039;&#039;WA_EM_YY&lt;br /&gt;
| Quickly identify such names&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;_EM_YY&#039;&#039;&#039;&lt;br /&gt;
| Suffix&lt;br /&gt;
| name suffix to all Primary APL functions AND Quad System Functions, including monadic and dyadic calls&lt;br /&gt;
| SysFnTS&#039;&#039;&#039;_EM_YY&#039;&#039;&#039;&lt;br /&gt;
| Quickly identify such names, referencing&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Abbreviations Dictionary==&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; style=&amp;quot;width: 70%&amp;quot;&lt;br /&gt;
! Abbrev&lt;br /&gt;
! Meaning&lt;br /&gt;
! Definition Location, Purpose, Cross Ref&#039;s&lt;br /&gt;
! Sample Source Code Usage&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;APA&#039;&#039;&#039;&lt;br /&gt;
| Arithmetic Progression Array&lt;br /&gt;
| C code suffix to variable type, sometimes variable names. for example, ⍳6 or iota-6 is an &#039;&#039;&#039;arithmetic progression array&#039;&#039;&#039; of integers. Definition for ARRAY_&#039;&#039;&#039;APA&#039;&#039;&#039; found in file &amp;lt;datatype.h&amp;gt;&lt;br /&gt;
| ARRAY_&#039;&#039;&#039;APA&#039;&#039;&#039; is a variable type. Ref. wiki &#039;&#039;&#039;[[APA|documentation page APA]]&#039;&#039;&#039;. For closely examining &#039;&#039;&#039;APA &#039;&#039;&#039; datatypes, see also &#039;&#039;&#039;[[System_Function_DR|System Function ⎕DR]]&#039;&#039;&#039;.&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;lp&#039;&#039;&#039;&lt;br /&gt;
| long pointer&lt;br /&gt;
| Usually found as a prefix to variable names.  NARS makes frequent use of pointers to speed up processing times, to make NARS2000.exe more efficient.&lt;br /&gt;
| &#039;&#039;&#039;lp&#039;&#039;&#039;tkRhtArg (var name; long ptr to token var structure of a right hand argument for a function call)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;NELM&#039;&#039;&#039;&lt;br /&gt;
| Number of Elements&lt;br /&gt;
| Usually embedded within variable names.  Conceptually like &#039;&#039;&#039;[[Rho|Rho or &amp;lt;apll&amp;gt;{rho}&amp;lt;/apll&amp;gt;]]&#039;&#039;&#039; of a vector.&lt;br /&gt;
| APL&#039;&#039;&#039;NELM&#039;&#039;&#039; apl&#039;&#039;&#039;NELM&#039;&#039;&#039;Rht; // VarType VarName; Right arg NELM for variable type(APLNELM) and variable named aplNELMRht&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;ODS&#039;&#039;&#039;&lt;br /&gt;
| OutputDebugString&lt;br /&gt;
| Variously used throughout program, especially see file &amp;lt;debug.c&amp;gt; for string printing to console, debugging. See function int oprintfW, usage example per &amp;lt;updates.c&amp;gt;, oprintfW (L&amp;quot;%3d:  SetEvent on %p (IDC_DNLPAUSE_BN -- hSuspend)\n&amp;quot;, guCnt++, dnlThrStr.hSuspend);  % means &amp;quot;Prt var here&amp;quot;; 3 = &amp;quot;use at least 3 spaces(max width) to show, pad as needed&amp;quot;; d = &amp;quot;Var is int&amp;quot;; hex-%x; float-%f; str-%s; ptrs-%p. L prefix=unicode str&lt;br /&gt;
| int oprintfW(LPWCHAR lpwszFmt, ...)  // Ptr to format string, variable list&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PerTab&#039;&#039;&#039;&lt;br /&gt;
| per tab, esp. per APL workspace tab&lt;br /&gt;
| Embedded in var names.  Detailed explanation of PerTab found in C source header file &amp;lt;pertab.h&amp;gt;.  &#039;&#039;&#039;NARS supports multiple simultaneously open and running workspaces.&#039;&#039;&#039;  Each workspace is displayed as a separate &#039;&#039;&#039;Tab&#039;&#039;&#039;, much like folder tabs.  All variables in all workspace are distinctly maintained, with each PerTab.&lt;br /&gt;
| LP&#039;&#039;&#039;PERTAB&#039;&#039;&#039;DATA lpMemPTD; where LP&#039;&#039;&#039;PERTAB&#039;&#039;&#039;DATA is the variable type and lpMemPTD is a pointer to PerTabData global memory&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;PTD&#039;&#039;&#039;&lt;br /&gt;
| per tab of data&lt;br /&gt;
| Embedded in var names.  Each NARS workspace is kept separate and distinct in its own PTD.&lt;br /&gt;
| lpMem&#039;&#039;&#039;PTD&#039;&#039;&#039; structured var name, in this case a ptr to PerTabData global memory&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;Rank&#039;&#039;&#039;&lt;br /&gt;
| Rank&lt;br /&gt;
| Rank: Scalars=0, Vectors=1, Matrices=2..N.  Like {rho}{rho} of an APL variable or contained data structure, see shape of the shape &#039;&#039;&#039;[[Rho|RhoRho or {rho}{rho}]]&#039;&#039;&#039;.&lt;br /&gt;
| APL&#039;&#039;&#039;RANK&#039;&#039;&#039; apl&#039;&#039;&#039;Rank&#039;&#039;&#039;Lft // Left arg rank (variable type, variable name)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;SIS&#039;&#039;&#039;&lt;br /&gt;
| State Indicator Stack&lt;br /&gt;
| Frequently embedded within variable and function names. Detailed explanation of SIS found in C source header file &amp;lt;sis.h&amp;gt;  See also APL&#039;s &#039;&#039;&#039;[[System_Command_SI|System Command )SI]]&#039;&#039;&#039;.&lt;br /&gt;
| lpMemPTD-&amp;gt;lp&#039;&#039;&#039;SIS&#039;&#039;&#039;Cur-&amp;gt;ResetFlag; (var name) AND Fill&#039;&#039;&#039;SIS&#039;&#039;&#039;Nxt (fcn name)&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;tk&#039;&#039;&#039;&lt;br /&gt;
| token&lt;br /&gt;
| Frequently found embedded in structured variable names. Tokens are [http://www.c4learn.com/c-programming/c-tokens-keywords-identifiers/ basic building blocks of C Programming]; hence &#039;&#039;&#039;tk&#039;&#039;&#039; vars frequently represent important structured variables in NARS.&lt;br /&gt;
| LPTOKEN lp&#039;&#039;&#039;tk&#039;&#039;&#039;RhtArg&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;TKT_&#039;&#039;&#039;&lt;br /&gt;
| token type&lt;br /&gt;
| Prefix to typed variable names. Most tokens are simple in that they have type and data only.e,g, TKT_LEFTPAREN and &#039;(&#039;.  Some frequently used tokens are complex in that their data points to other data. Token types are also associated with a &amp;lt;u&amp;gt;Constant type &#039;&#039;&#039;value&#039;&#039;&#039;&amp;lt;/u&amp;gt;, e.g. &#039;&#039;&#039;TKT_&#039;&#039;&#039;VARARRAY = &#039;&#039;&#039;1A&#039;&#039;&#039;(Hex val, 26 dec val). Token types may also represent APL/System Functions - &#039;&#039;&#039;TKT_&#039;&#039;&#039;FCNNAMED (52 hex) = a named function. Full explanation see file &amp;lt;tokens.h&amp;gt;. See also typedef structures &#039;&#039;&#039;[[Frequently_Used_TypeDef_Structures_and_Variables#TOKEN|TOKEN]]&#039;&#039;&#039;.&lt;br /&gt;
| &#039;&#039;&#039;TKT_&#039;&#039;&#039;VARARRAY - main workhorse token type.  Its tkData is an HGLOBAL (global memory handle) which contains an array which is either simple, nested, or mixed(combination of diff data types, e.g. string int float and or double).&lt;br /&gt;
|-&lt;br /&gt;
| &#039;&#039;&#039;UTF&#039;&#039;&#039;&lt;br /&gt;
| Unicode Transformation Format&lt;br /&gt;
| Variable names, constants, [http://unicode.org/faq/utf_bom.html especially UTF16]; algorithmic mapping for Unicode code numbers (except surrogate code points) to unique byte sequencing (esp. 16-bit = 2-byte sequences). ASCII uses 2^7 bits=128 codes; EBSDIC 2^8=256 codes. Unicode 2-byte uses 2^16=65,536 codes, as currently does NARS, see also System Functions &#039;&#039;&#039;[[System_Function_AV|&amp;lt;apll&amp;gt;{quad}&amp;lt;/apll&amp;gt;AV]]&#039;&#039;&#039; and &#039;&#039;&#039;[[System_Function_UCS|&amp;lt;apll&amp;gt;{quad}&amp;lt;/apll&amp;gt;UCS]]&#039;&#039;&#039;. Both the 32-bit and 64-bit NARS2000.exe&#039;s use 16-bit uncodes; the 32 and 64 bit NARS exe&#039;s refer to numeric data computer representations and calculation precisions. List of defined &#039;&#039;&#039;UTF&#039;&#039;&#039;16_ vars see file &amp;lt;Unicode.h&amp;gt;.&lt;br /&gt;
| &#039;&#039;&#039;UTF&#039;&#039;&#039;16_RHO&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Category:NARS 2000]]&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Category:NARS_2000&amp;diff=3634</id>
		<title>Category:NARS 2000</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Category:NARS_2000&amp;diff=3634"/>
		<updated>2019-10-13T21:15:09Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: new&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These pages deal with the NARS 2000 system itself. How to install, update, program or implement NARS 2000. These pages should have npthing to do with the APL kanguage.&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
	<entry>
		<id>https://wiki.nars2000.org/index.php?title=Building_An_Executable&amp;diff=3633</id>
		<title>Building An Executable</title>
		<link rel="alternate" type="text/html" href="https://wiki.nars2000.org/index.php?title=Building_An_Executable&amp;diff=3633"/>
		<updated>2019-10-13T21:09:38Z</updated>

		<summary type="html">&lt;p&gt;Paul Robinson: /* Periodic NARS Updates */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;float:right; padding-left:5px;&amp;quot;&amp;gt;&lt;br /&gt;
{| style=&amp;quot;text-align:left; border:1px solid #aaaaaa; background-color:#f9f9f9;width: 200px;font-family: Verdana, sans-serif;&amp;quot;&lt;br /&gt;
|- padding:5px;padding-top:0.5em;font-size: 95%;&lt;br /&gt;
|&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;div style=&amp;quot;border:1px solid #ccc; background: #fff; border-right:3px solid #ccc; border-bottom:3px solid #ccc; text-align: center; padding:3px; float:right; font-size: smaller; line-height: 1.3; margin-right: 4px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width:100%&amp;quot;&amp;gt;{{CURRENTDAYNAME}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;font-size: x-large; width: 100%;&amp;quot;&amp;gt;{{CURRENTDAY}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width: 100%;&amp;quot;&amp;gt; {{CURRENTMONTHNAME}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;width: 100%;&amp;quot;&amp;gt;{{CURRENTYEAR}}&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;background: #aaa; color: #000;&amp;quot;&amp;gt;&#039;&#039;&#039;{{CURRENTTIME}}&#039;&#039;&#039; UTC&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;big&amp;gt;&#039;&#039;&#039;NARS2000 Building The Executable&#039;&#039;&#039;&amp;lt;/big&amp;gt;&lt;br /&gt;
----&lt;br /&gt;
&amp;lt;div style=&amp;quot;text-align:center;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
|&lt;br /&gt;
__TOC__&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt; &lt;br /&gt;
==Update Notice==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;font color=blue&amp;gt;Although it is not the &amp;quot;ONLY compiler - IDE (integrated developer&#039;s environment) choice&amp;quot;, the below uses &#039;&#039;&#039;Visual Studio 2013&#039;&#039;&#039; as its designated C/C++ Compiler and IDE(Integrated Developer&#039;s Environment, GUI/Graphical User Interface for programming).  All source code compiles correctly and multiple APL workspaces have been tested for correct APL/NARS functionality.  This page is current, up-to-date re NARS working with VS2013&#039;s compiler and standards.  The conversion to VS2013 resulted in a more up-to-date (5 years[2008 to 2013] more current software technology) program for the GUI Builder and Compiler interface, including newer C/C++ programming standards.  This has represented a major cyclical software upgrade and results in greater APL user functionality via improved C coding.  Recent releases of NARS2000.exe (32 and 64-bit versions) are fully functional.&amp;lt;/font&amp;gt;&lt;br /&gt;
&amp;lt;div align=&amp;quot;right&amp;quot;&amp;gt;&amp;lt;span class=&amp;quot;plainlinks&amp;quot; style=&amp;quot;font-size:70%&amp;quot;&amp;gt;v---- &#039;&#039;&#039;Useful Developer links:&#039;&#039;&#039; ----v&amp;lt;br&amp;gt;[http://svnbook.red-bean.com Version Control with Subversioning - Conceptual Gen Bkgnd.]&amp;lt;br&amp;gt;[http://sourceforge.net/p/forge/documentation/svn/ Source Forge Versioning Documentation] &amp;lt;br&amp;gt;[http://sourceforge.net/p/nars2000/code/HEAD/tree/trunk/ Source Forge NARS2000 Source Code]&amp;lt;/span&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Why Build Your Own==&lt;br /&gt;
&lt;br /&gt;
First of all, you do not have to build your own.  NARS has already created a great existing Nested Arrays Research System APL interpreter.  NARS2000.exe is freely available at [http://www.nars2000.org/download/Download.html NARS Downloads].  Downloads includes Beta releases for APLers so inclined.&lt;br /&gt;
&lt;br /&gt;
On the other hand, why not expand your programming/software and computer skill horizons?  Many people think and believe &#039;&#039;&#039;Kenneth Iverson&#039;s&#039;&#039;&#039; work remains that of a true genius, a bright light among some very bright intellectual lights, both from a theoretical as well as a software implementation perspective.  Here&#039;s your opportunity to attempt to improve upon some very substantive, preexisting software development work - to further it, to make it even better, and perhaps best of all - &#039;&#039;&#039;it&#039;s free&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Personalize some already pretty amazing software for yourself, or share it with others and get &#039;&#039;&#039;their feedback&#039;&#039;&#039; for even greater insight and subsequent improvement.  NARS version of APL already has over a quarter million lines of source code, subroutines, macros, functions, etc. - 50 years of sometimes intense and continuing evolution, so you are &amp;lt;u&amp;gt;not&amp;lt;/u&amp;gt; creating something from undeveloped scratch, but inheriting and working from already highly evolved, rigidly disciplined concepts and rigorously debugged software over time.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;APL/2&#039;&#039;&#039; has been used in physics, science, genetic engineering-DNA studies, advanced mathematics, robotics, engineering, artificial intelligence, image processing, bio-medicine, VLSI, financial, statistical and social science applications.  NASA and Astronomers have used APL.&lt;br /&gt;
&lt;br /&gt;
Now APL/2 is 100% customizable.  Perhaps you will be the first to customize APL to safely drive a vehicle, help save a life, make new discoveries or make some process(es) more efficient.&lt;br /&gt;
&lt;br /&gt;
It&#039;s &#039;&#039;&#039;free&#039;&#039;&#039;. It&#039;s &amp;lt;u&amp;gt;&#039;&#039;&#039;evolved&#039;&#039;&#039;&amp;lt;/u&amp;gt;.  Once you start examining NARS/APL/APL2 source code you&#039;ll find it is comprehensive, elegant, process-symbol-efficient, focused toward the end-user, evolved over some fifty years of use, structurally enigmatic, tirelessly debugged &amp;lt;u&amp;gt;and&amp;lt;/u&amp;gt; rich with coding techniques - a great learning tool, even if absolutely nothing else - and NARS believes it is far, far better than just a learning tool.  You&#039;ll learn about Bison Parsing, how it helps define compilers and interpreters.  Further, NARS is a tremendous opportunity to learn more about the human-machine interface; how machine hardware operates and - better understand how software and hardware interact together.&lt;br /&gt;
&lt;br /&gt;
One of the stellar, intellectually expansive aspects of APL/2 is - how fully the language embraces the &amp;lt;u&amp;gt;breadth of hardware functionality&amp;lt;/u&amp;gt;.  This includes instructions running core processor chip(s) and peripheral devices.  This is not your grandparents&#039; punch-card software program run on a room-sized computer, although that was marvelous at its time, but it may have taken him/her several days to get results back for in an introductory chemistry or math lab course.  Today &#039;&#039;&#039;[http://phys.org/news/2015-03-quantum-unexpected-ways.html data structures influence speed of quantum search in unexpected ways]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Platforms==&lt;br /&gt;
&lt;br /&gt;
The current version of NARS2000 may be run and built on a variety of Windows platforms, including most or all post-Windows-98 OS versions.  Furthermore, a long-term goal is to enable NARS to be built on Linux, Mac OS, etc. as per user requests and Developer interests.  If you do not have a Windows machine, the following may be helpful to you:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.howtogeek.com/187359/5-ways-to-run-windows-software-on-a-mac/ Five ways to run Windows software on a Mac.]&#039;&#039;&#039; From HowToGeek.com, methods include 1)Virtual Machines, 2)Boot Camp, 3)Wine, 4)CrossOver Mac (not free) and 5)Remote Desktop.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.howtogeek.com/133515/4-ways-to-run-windows-software-on-linux/ Four ways to run Windows software on Linux.]&#039;&#039;&#039; Again from HowToGeek.com, methods include 1)Use Wine, 2)Run Windows in a Virtual Machine, 3)Try Crossover (not free) and 4)Remote Desktop.  A fifth way per [http://www.pcworld.com/article/2900497/how-to-run-windows-software-in-linux-everything-you-need-to-know.html PC World] is dual booting both Linux and Windows on your machine.  This essentially involves partitioning hard drives with a portion reserved for Linux and a portion reserved for Windows.  With costs of external hard drives continuing to decline, buying an external or network hard drive may free up hard drive storage space requirements.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[http://www.howtogeek.com/173353/how-to-run-windows-software-on-a-chromebook/ How to Run Windows Software on a Chromebook {notebook or tablet PC}.]&#039;&#039;&#039; Again from HowToGeek.com, methods include 1)Access a Windows Desktop Remotely, 2)Use Developer Mode and Install Wine (not available for all Chromebooks), 3)Use Developer Mode and Install a Virtual Machine (may require an Intel Chromebook).&lt;br /&gt;
&lt;br /&gt;
Furthermore, if you work using a tablet or other computing device which supports remote desktop software such as &#039;&#039;&#039;[http://teamviewer.com Team Viewer]&#039;&#039;&#039; and you have a home or work computer running Windows - then you can remotely use NARS over your network and internet using that computer as a host and your local device as a client. Network and internet speeds are sufficiently fast and TeamViewer, for instance, is very good at making your remote desktop seem and respond as if virtually right in front of you.&lt;br /&gt;
&lt;br /&gt;
For the present, the following sections detail descriptions for building the executable with bias towards Windows.&lt;br /&gt;
&lt;br /&gt;
==Downloads==&lt;br /&gt;
&lt;br /&gt;
To build the executable &amp;lt;u&amp;gt;in summary&amp;lt;/u&amp;gt; you&#039;ll need the following:&lt;br /&gt;
&lt;br /&gt;
# C Compiler and Linker&lt;br /&gt;
## Make program&lt;br /&gt;
## Resource Compiler&lt;br /&gt;
## Windows SDK&lt;br /&gt;
# Parser Generator&lt;br /&gt;
# Zip Utility&lt;br /&gt;
# PHP (Hypertext Preprocessor)&lt;br /&gt;
# NARS2000 Source Code&lt;br /&gt;
# NARS2000 External Libraries&lt;br /&gt;
# Optionally, Multi-precision Library Source&lt;br /&gt;
# STDINT.H header file&lt;br /&gt;
# Version Control program&lt;br /&gt;
# Doctor Dump SDK&lt;br /&gt;
# Optionally, a File Differencing/Merge program&lt;br /&gt;
&amp;lt;br /&amp;gt;All of the tools you&#039;ll need are &#039;&#039;&#039;freely available&#039;&#039;&#039;.  Some of them happen to be Microsoft-specific. Bill Gates while at Harvard actually worked a bit on/with APL, obviously he discovered the importance of working with arrays and symbolic notation. At the same time there is no reason more generic tools (such as [http://www.delorie.com/djgpp/ DJGPP], [http://www.cygwin.com/ Cygwin] or [http://www.mingw.org/ MinGW]) can&#039;t be used, a task NARS is hoping someone will volunteer to investigate.  In particular, the &#039;&#039;&#039;tools currently used&#039;&#039;&#039; to create the APL Executable, &amp;lt;u&amp;gt;in detail&amp;lt;/u&amp;gt;, are as follows:&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
# &amp;lt;u&amp;gt;&#039;&#039;&#039;C&#039;&#039;&#039;&amp;lt;/u&amp;gt; (needed for this NARS2000 project is &#039;&#039;&#039;Visual C++ 2013&#039;&#039;&#039; = C++ &amp;lt;u&amp;gt;GUI development environment and compiler for the C language&amp;lt;/u&amp;gt;, which much of APL&#039;s interpreter is written in). Compiler and Linker:  &#039;&#039;&#039;[https://app.vssps.visualstudio.com/profile/review?download=true&amp;amp;family=VisualStudioExpressDesktop&amp;amp;release=VisualStudio2013Upd4&amp;amp;type=web&amp;amp;slcid=0x409 Microsoft Visual Studio 2013 Express for Desktop Windows]&#039;&#039;&#039; (download requires a FREE Microsoft/Visual Studio account) OS requires Windows XP or later &amp;amp;mdash; includes Link, Make, a Resource Compiler, and an SDK (among others).  Download/Installation Notes: The &#039;&#039;&#039;downloaded file&#039;&#039;&#039; may be double-clicked in Windows Explorer. VS 2013 does NOT Install to a mapped or network drive(but to something like C:\Program Files\...).  It must be Installed on a local PC drive (e.g. C:\...) and &#039;&#039;&#039;unmapped directory&#039;&#039;&#039; (but you can map to it later) - Microsoft apparently requires installation to a local machine drive letter such as &amp;quot;C:\...&amp;quot;. &amp;amp;nbsp; VS2013 Desktop is free &#039;&#039;&#039;and&#039;&#039;&#039; it includes a GUI or graphical user interface (icon-based IDE or integrated developer&#039;s environment), which is geometrically easier to use than a command-line interface.  Windows 8.1 SDK (does NOT require Windows 8.1, but does update for some 8.1 capabilities, especially useful for using Visual Studio 2013; &#039;&#039;&#039;[https://msdn.microsoft.com/en-us/windows/desktop/bg162891.aspx?f=255&amp;amp;MSPPError=-2147217396 download is available at Microsoft]&#039;&#039;&#039;.  &amp;lt;span class=&amp;quot;plainlinks&amp;quot; style=&amp;quot;font-size:60%&amp;quot;&amp;gt;&#039;&#039;&#039;Windows SDK&#039;&#039;&#039; (the following MAY NOT BE NECESSARY, SDK=Software Developers Kit, sometimes needed for &#039;&#039;&#039;64-bit installations&#039;&#039;&#039;, usually choose download file GRMSDKX_EN_DVD.iso even for Intel machines) &#039;&#039;&#039;[http://www.microsoft.com/en-us/download/details.aspx?id=18950 download here]&#039;&#039;&#039;, with &#039;&#039;&#039;installation instructions [https://github.com/enGits/engrid/wiki/Configure-Microsoft-Visual-Studio-2008-Express-to-also-build-for-Windows-x64 here]&#039;&#039;&#039;.&amp;lt;/span&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;Parser Generator&#039;&#039;&#039;:  &#039;&#039;&#039;[https://cygwin.com/install.html Bison]&#039;&#039;&#039;, a Cygwin package, Save and run either &#039;&#039;&#039;setup-x86.exe&#039;&#039;&#039; (32-bit systems) or &#039;&#039;&#039;setup-x86_64.exe&#039;&#039;&#039; (64-bit systems) as appropriate to your system, &#039;&#039;&#039;Choose A Download Source&#039;&#039;&#039;:  Install from Internet, &#039;&#039;&#039;Select Root Install Directory&#039;&#039;&#039;, &#039;&#039;&#039;Select Local Package Directory&#039;&#039;&#039;, &#039;&#039;&#039;Select Your Internet Connection&#039;&#039;&#039;, &#039;&#039;&#039;Choose A Download Site&#039;&#039;&#039;, &#039;&#039;&#039;Select Packages&#039;&#039;&#039;:  Leave alone &#039;&#039;&#039;All (Default)&#039;&#039;&#039; - first time through, just click [Next], &#039;&#039;&#039;Devel&#039;&#039;&#039;, and &#039;&#039;&#039;bison&#039;&#039;&#039;, other dependent packages may be installed along with &#039;&#039;&#039;bison&#039;&#039;&#039;, if not then &#039;&#039;&#039;after first&#039;&#039;&#039; Cygwin installation finishes, double-click the downloaded Cygwin file in Windows Explorer, downloaded filename should be something like &#039;&#039;&#039;setup-x86_64.exe&#039;&#039;&#039; and the &#039;&#039;&#039;second time through&#039;&#039;&#039; do specifically download and install &#039;&#039;&#039;Dev&#039;&#039;&#039;, &#039;&#039;&#039;Bison&#039;&#039;&#039; - informally note the &#039;&#039;&#039;tree structure&#039;&#039;&#039; during the Bison download/install since &#039;&#039;&#039;creating parse trees&#039;&#039;&#039; is &#039;&#039;&#039;very much&#039;&#039;&#039; a &#039;&#039;Bison program specialty&#039;&#039;, a strength.  Compilers and even APL itself relies heavily on correct statement type recognition and parsing.  To make sure you successfully downloaded and installed &#039;&#039;&#039;bison.exe&#039;&#039;&#039;, the file should be &#039;&#039;&#039;found&#039;&#039;&#039; or reside in the C:\Cygwin\bin or C:\cygwin64\bin folder.  Make note of the folder location since you will need it when setting the PARGEN environment variable shortly, below.&lt;br /&gt;
# &#039;&#039;&#039;Zip Utility&#039;&#039;&#039;:  &#039;&#039;&#039;[http://www.7-zip.org/ 7-Zip]&#039;&#039;&#039; (Latest version, 32- or 64-bit, as appropriate to your system; needed to Extract/Unzip the files and folders you are downloading for this project.)  If you already have a Zip utility program on your PC, Tablet or Server such as WinZip, you can normally skip the 7-Zip download/install.&lt;br /&gt;
# &#039;&#039;&#039;PHP&#039;&#039;&#039; (Hypertext Preprocessor):  &#039;&#039;&#039;[http://www.php.net/downloads.php Downloads]&#039;&#039;&#039; (&amp;lt;u&amp;gt;Windows downloads&amp;lt;/u&amp;gt; for Windows systems.) (Windows binaries/VC9 x86 Thread Safe/Latest version/Zip or Installer, your choice) (Items to Install: Entire &#039;&#039;&#039;Script Executable&#039;&#039;&#039;, and entire &#039;&#039;&#039;Extras&#039;&#039;&#039;). Place the unzipped file&#039;s contents into something like &amp;quot;C:\PHP&amp;quot;. The executable file &amp;quot;php.exe&amp;quot; needs to be &amp;quot;on your directory or environmental path&amp;quot; when later compiling or building the APL executable.&lt;br /&gt;
# &#039;&#039;&#039;NARS2000 Source Code&#039;&#039;&#039;:  Click on &#039;&#039;&#039;[http://sourceforge.net/projects/nars2000/ Browse Code] button&#039;&#039;&#039; at &#039;&#039;&#039;NARS&#039;&#039;&#039; SourceForge.net &#039;&#039;&#039;code repository&#039;&#039;&#039;. &lt;br /&gt;
## You also likely need a Version Control program for SourceForge code &#039;checkouts&#039;, e.g. see &#039;&#039;&#039;Tortoise SVN&#039;&#039;&#039; below and &#039;&#039;&#039;[http://tortoisesvn.net/ here, visit Tortoise SVN&#039;s download page]&#039;&#039;&#039;, then download and install Tortoise SVN&#039;s 64-bit or 32-bit version depending on your operating system to subsequently be able to auto-check-out NARS source code. &amp;lt;span class=&amp;quot;plainlinks&amp;quot; style=&amp;quot;font-size:70%&amp;quot;&amp;gt;&amp;lt;br&amp;gt;&amp;lt;u&amp;gt;&#039;&#039;&#039;Prior&#039;&#039;&#039;&amp;lt;/u&amp;gt; non-current NARS Source Code versions available at [http://code.google.com/p/nars2000/source/checkout Code Google].&amp;lt;/span&amp;gt;&lt;br /&gt;
# &#039;&#039;&#039;NARS2000 External Libraries&#039;&#039;&#039;:  [http://www.nars2000.org/download/binaries/misc.zip Miscellaneous Library] (misc.zip, which contains 4 .php files and 1 .ttf file - all directly unzipped into C:\NARS2000) and the following NARS libraries:&lt;br /&gt;
## [http://www.nars2000.org/download/binaries/mplibs.zip &#039;&#039;&#039;MPIR/MPFR/ECM Libraries&#039;&#039;&#039;] - These libraries(mplibs.zip) should be directly extracted or unzipped into the C:\NARS2000 folder such that three(3) distinct sub-directories are &#039;&#039;&#039;directly&#039;&#039;&#039; created: \ecm, \mpfr and \mpir, e.g. C:\NARS2000\ecm.&lt;br /&gt;
## [http://www.nars2000.org/download/binaries/gsldir.zip &#039;&#039;&#039;gsl Library&#039;&#039;&#039;] - This library(gsldir.zip) should be directly un-zipped into the C:\NARS2000 folder such that it becomes &#039;&#039;&#039;C:\NARS2000\gsl&#039;&#039;&#039;.  Folder structure &amp;quot;C:\NARS2000\gsldir\gsl&amp;quot; would be invalid.&lt;br /&gt;
## [http://www.nars2000.org/download/binaries/qdebug.zip &#039;&#039;&#039;qdebug Library&#039;&#039;&#039;] - This library(qdebug.zip) should also be directly un-zipped into the C:\NARS2000 folder such that it becomes &#039;&#039;&#039;C:\NARS2000\qdebug&#039;&#039;&#039;.  Make sure it is NOT double-enclosed when unzipped, for example the following would be an invalid folder setup structure: C:\NARS2000\qdebug\qdebug.&lt;br /&gt;
# &#039;&#039;&#039;Multi-precision Library Source Code:  [http://www.nars2000.org/download/binaries/mpfns-src.zip MPIR/MPFR/ECM Source]&#039;&#039;&#039;.  This zipped download is large (roughly 0.5GB) and is needed primarily to reproduce files in the MPIR/MPFR/ECM Library download so as to satisfy requirements of the GNU General Public License (GPL) v3.  For more details on using the files in the download, look in the zipped file for &amp;lt;b&amp;gt;&amp;lt;code&amp;gt;readme.txt&amp;lt;/code&amp;gt;&amp;lt;/b&amp;gt;.  If you are content to use the already-compiled existing binary libraries in [http://www.nars2000.org/download/binaries/mplibs.zip MPIR/MPFR/ECM Libraries], you may not immediately need the MPIR/MPFR/ECM Source Code; on the other hand - 128-bit CPU chips are in manufacturing production pipelines, quadruple-precision 128-bit floating-point format has been standardized by the IEEE and ultra-precise calculations are already needed in such fields as quantum physics, ref. [http://phys.org/news/2014-06-physicists-quantum-ultra-precise.html Physicists take quantum leap toward ultra-precise measurement], 6/2/2014.  One of APL&#039;s strengths is its handling of mathematically precise calculations and the &#039;&#039;&#039;large size&#039;&#039;&#039; of the multi-precision source code library reinforces that.&lt;br /&gt;
# [http://msinttypes.googlecode.com/svn/trunk/stdint.h STDINT.H] header file installed in the MS Visual Studio 2013 include directory (V:\VC\include -- see below)&lt;br /&gt;
# &#039;&#039;&#039;SubVersion Control program&#039;&#039;&#039;:  [http://tortoisesvn.net/downloads Tortoise SVN] (Current version, 32- or 64-bit depending upon your OS)&lt;br /&gt;
# &#039;&#039;&#039;Doctor Dump SDK&#039;&#039;&#039;:  [https://drdump.com/public/DoctorDumpSDK/DoctorDumpSDK.zip Doctor Dump SDK] - e.g. DoctorDumpSDK.zip.&lt;br /&gt;
# &#039;&#039;&#039;File Differencing/Merge program&#039;&#039;&#039;:  [http://winmerge.org/ WinMerge] (&#039;&#039;&#039;Latest stable version&#039;&#039;&#039;, usually downloads to something like WinMerge-k.m.n-Setup.exe where k, m and n are version/sub-version numbers.)&lt;br /&gt;
&lt;br /&gt;
==Install Tools==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Preface&#039;&#039;&#039;, Convention: &#039;&#039;&#039;x86&#039;&#039;&#039; generally refers to &#039;&#039;&#039;32-bit&#039;&#039;&#039; software installations while 64 (or blank) represents 64-bit software installations on a Windows OS machine.  NARS works on &#039;&#039;&#039;both&#039;&#039;&#039; 32-bit and 64-bit systems, but you should decide &#039;&#039;&#039;in advance&#039;&#039;&#039; which type of install you want 64 vs. 32-bit - ditto for all tool installs.  Installation examples:&lt;br /&gt;
# C:\Program Files (x86)\ &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;Represents 32-bit software program installation, normal folder location.&lt;br /&gt;
# C:\Program Files\ &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; Represents 64-bit software program installation, normal folder location.&lt;br /&gt;
Also, &#039;&#039;&#039;both&#039;&#039;&#039; folder locations just above frequently and even always exist on most machines, but for consistency and integration purposes the software should be 32 &#039;&#039;&#039;&amp;lt;u&amp;gt;or&amp;lt;/u&amp;gt;&#039;&#039;&#039; 64-bit.  Most people choose 64-bit installs if their Windows OS supports the 64-bit architecture, with 32-bit available for backward software compatibility in conjunction with less current systems.  If you don&#039;t know which architecture your system uses, go to the Control Panel, System Information.  Downloads usually get placed into a Downloads folder.  Several of the unzipped NARS tools get placed directly into the C:\NARS2000 folder, see individual tools for exact locations.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To install the Microsoft &#039;&#039;&#039;Visual Studio 2013 Express C compiler&#039;&#039;&#039;, see Downloads(&amp;lt;u&amp;gt;detail&amp;lt;/u&amp;gt;, #1 above).  Visual C++ 2013 usually installs into something like, &amp;quot;C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\VCExpress.exe&amp;quot; (64-bit loc) and you may want to place a &#039;&#039;&#039;Shortcut&#039;&#039;&#039; to &#039;&#039;&#039;VCExpress.exe&#039;&#039;&#039; on your Desktop by right-clicking on that VCExpress.exe file in Windows Explorer and Send To - Desktop (create shortcut). (Windows 8 Users: You can also &#039;&#039;&#039;Pin VCExpress.exe To your Taskbar&#039;&#039;&#039; for quick, easy access.)  (Prior/obs. Microsoft setup routine name: run the vcsetup.exe program.)  Afterwards including after drive plus folder remapping - the files &#039;&#039;&#039;msobj80.dll&#039;&#039;&#039;, &#039;&#039;&#039;mspdb80.dll&#039;&#039;&#039;, &#039;&#039;&#039;mspdbcore.dll&#039;&#039;&#039;, and &#039;&#039;&#039;mspdbsrv.exe&#039;&#039;&#039; all need to be copied from &#039;&#039;&#039;V:\Common7\IDE&#039;&#039;&#039; to &#039;&#039;&#039;V:\VC\bin&#039;&#039;&#039;, where the &#039;&#039;&#039;V&#039;&#039;&#039; drive is a substitute/mapping for &#039;&#039;&#039;C:\Program Files\Microsoft Visual Studio 9.0&#039;&#039;&#039;.  See the discussion below on [[#Set_Up_Makefile_Environment_Variables|Set Up Makefile Environment Variables]].&lt;br /&gt;
&lt;br /&gt;
To install the Parser Generator (Bison), see the instructions above.  When the Cygwin setup program asks you to choose a &#039;&#039;&#039;Default Text File Type&#039;&#039;&#039;, choose &#039;&#039;&#039;DOS/text&#039;&#039;&#039; so any committed files are the same as in the version control repository.&lt;br /&gt;
&lt;br /&gt;
To install Doctor Dump SDK, unzip it in a directory at or above %NARSROOT%, this usually means unzipping into folder C:\DoctorDumpSDK.  See also discussion below on [[#Set_Up_Makefile_Environment_Variables|Set Up Makefile Environment Variables]].&lt;br /&gt;
&lt;br /&gt;
Install the rest of the tools as per their instructions above, in the Downloads section.&lt;br /&gt;
&lt;br /&gt;
==Install The Source Code==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ol&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;First create a NARS2000 &#039;&#039;&#039;root folder&#039;&#039;&#039; somewhere on one of your hard drives, perhaps calling it &#039;&#039;&#039;NARS2000&#039;&#039;&#039;, as in &#039;&#039;&#039;C:\NARS2000&#039;&#039;&#039; (most common) or perhaps at some lower level.  The source code and external libraries are typically installed at or into this level, e.g. qdebug.zip into C:\NARS2000 as C:\NARS2000\qdebug.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Under the root folder make three folders:  &#039;&#039;&#039;trunk&#039;&#039;&#039;, &#039;&#039;&#039;msieve&#039;&#039;&#039;, and &#039;&#039;&#039;branches&#039;&#039;&#039;.  The first folder (&#039;&#039;&#039;trunk&#039;&#039;&#039;) will hold the main body of NARS/APL built exe interpreter &#039;&#039;&#039;source&#039;&#039;&#039; code.  The second (&#039;&#039;&#039;msieve&#039;&#039;&#039;) will be utilized for code used to &#039;&#039;&#039;factor numbers&#039;&#039;&#039;, and the third (&#039;&#039;&#039;branches&#039;&#039;&#039;) will contain individual developer branches of the main code not as yet ready for release, but made public for other developers to see.&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Using a Version Control program such as &#039;&#039;&#039;TortoiseSVN&#039;&#039;&#039;, download-checkout the source code (see [[#Check_Out_The_Source_Code|Check Out The Source Code]]),&amp;lt;/li&amp;gt;&lt;br /&gt;
  &amp;lt;li&amp;gt;Download the &#039;&#039;&#039;misc.zip&#039;&#039;&#039;, &#039;&#039;&#039;qdebug.zip&#039;&#039;&#039;, &#039;&#039;&#039;gsldir.zip&#039;&#039;&#039;, and &#039;&#039;&#039;mplibs.zip&#039;&#039;&#039; files into the root folder and unzip them (directly into that root folder, e.g. C:\NARS2000) using e.g. &#039;&#039;&#039;7z.exe&#039;&#039;&#039; (unzip/extract program used) as in &#039;&#039;&#039;7z x misc.zip&#039;&#039;&#039;, &#039;&#039;&#039;7z x qdebug.zip&#039;&#039;&#039;, &#039;&#039;&#039;7z x gsldir.zip&#039;&#039;&#039;, and &#039;&#039;&#039;7z x mplibs.zip&#039;&#039;&#039; - or double-click on those downloaded zip file names using Windows File Explorer and Extract All (again typically directly into NARS root folder previously set up).&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ol&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Check Out The Source Code==&lt;br /&gt;
&lt;br /&gt;
An easy way to initialize your copy of the source code for the first time, although it may initially appear cumbersome to an SVN newcomer, is to use a version control program such as TortoiseSVN, mentioned above.  One very helpful feature of TortoiseSVN is that it integrates well with Windows File Explorer.  After downloading and installing TortoiseSVN and then rebooting your PC, there are two directories you will need to Install/initialize-checkout/TortoiseSVN-on.&lt;br /&gt;
# &#039;&#039;&#039;First&#039;&#039;&#039; bring up Windows Explorer, right-click on the &#039;&#039;&#039;trunk&#039;&#039;&#039; folder you manually created, and choose &#039;&#039;&#039;SVN Checkout&#039;&#039;&#039;.&lt;br /&gt;
## If you do not see &amp;quot;SVN Checkout&amp;quot; when you right-click on the &#039;&#039;&#039;trunk&#039;&#039;&#039; folder, download &#039;&#039;&#039;Tortoise SVN&#039;&#039;&#039; per the &#039;&#039;&#039;Tortoise SVN link above&#039;&#039;&#039;([[#Downloads|Downloads-NARS2000 Source Code-Tortoise SVN]].  The online NARS SourceForge URL of source code repository: is &#039;&#039;&#039;svn://svn.code.sf.net/p/nars2000/code/trunk&#039;&#039;&#039; and your local Checkout directory: is &#039;&#039;&#039;C:\NARS2000\trunk&#039;&#039;&#039; (or wherever your trunk folder is) - quite likely you will have to edit the TortoiseSVN repository field or program local folder field because default text inserted by TortoiseSVN usually does not match folder location(s) identically.  Depth should show Fully recursive, the default.&lt;br /&gt;
## To begin source code downloading/checkout into your locally created &#039;&#039;&#039;trunk&#039;&#039;&#039; folder click the &#039;&#039;&#039;OK&#039;&#039;&#039; button. Code downloading/checkout should then begin. With a high-speed Internet connection, time required to TortoiseSVN download/checkout NARS code is on the order of roughly two minutes.  When successfully complete, you should get a return message at the end of the downloads list, like &#039;&#039;&#039;Completed at revision nnnn&#039;&#039;&#039;.&lt;br /&gt;
# &#039;&#039;&#039;Second&#039;&#039;&#039; (and this is a similar repeat step but using folder &#039;&#039;&#039;msieve&#039;&#039;&#039; instead of trunk), bring up Windows Explorer, right-click on the &#039;&#039;&#039;msieve&#039;&#039;&#039; folder you likewise manually created - and choose &#039;&#039;&#039;SVN Checkout...&#039;&#039;&#039;.  This time online NARS &#039;&#039;&#039;URL of repository:&#039;&#039;&#039; is &#039;&#039;&#039;svn://svn.code.sf.net/p/nars2000/code/msieve&#039;&#039;&#039; (this address is slightly different than step 1) and your local &#039;&#039;&#039;Checkout directory:&#039;&#039;&#039; is &#039;&#039;&#039;C:\NARS2000\msieve&#039;&#039;&#039; (or wherever your &#039;&#039;&#039;msieve&#039;&#039;&#039; folder is).  Again, depth should be fully recursive and click the &#039;&#039;&#039;OK&#039;&#039;&#039; button to begin.  This step two normally completes in under five seconds, downloading far fewer files than the trunk download.  Normally, the &amp;lt;u&amp;gt;same&amp;lt;/u&amp;gt; msieve &amp;lt;u&amp;gt;revision&amp;lt;/u&amp;gt; number should appear after finishing this download as per trunk download in step 1.&lt;br /&gt;
&lt;br /&gt;
The above &#039;&#039;&#039;two&#039;&#039;&#039; steps/distinct-folders need be initialized this first checkout time through - in order to establish the special hidden SVN directories for subversion &amp;quot;synching&amp;quot; between your local source code and NARS online code repository. As a brief check that your &#039;&#039;&#039;local&#039;&#039;&#039; NARS source code files match NARS, there should be green check marks on folders trunk and msieve on your PC, placed there by TortoiseSVN. [http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-wcstatus.html  TortoiseSVN Status Information.]&lt;br /&gt;
&lt;br /&gt;
You will still or now need to download and unzip &#039;&#039;&#039;qdebug.zip&#039;&#039;&#039;, &#039;&#039;&#039;misc.zip&#039;&#039;&#039;, &#039;&#039;&#039;gsldir.zip&#039;&#039;&#039;, and &#039;&#039;&#039;mplibs.zip&#039;&#039;&#039; as described above.&lt;br /&gt;
&lt;br /&gt;
Subsequently, you may quickly and easily update your local copy of NARS source code by right-clicking on the &#039;&#039;&#039;trunk&#039;&#039;&#039; and/or &#039;&#039;&#039;msieve&#039;&#039;&#039; folders and choose &#039;&#039;&#039;SVN Update&#039;&#039;&#039;.  One useful feature of sub-versioning programs such as TortoiseSVN is that only &#039;&#039;&#039;changed files&#039;&#039;&#039; from the online latest official version will need to be subsequently downloaded as changes are made in futuro, re subsequent NARS revisions.&lt;br /&gt;
&lt;br /&gt;
Since you may be unfamiliar with the download process your first time through, it make take slightly longer; however, the second or third time you &amp;lt;u&amp;gt;Check Out The Source Code&amp;lt;/u&amp;gt;, over time, the entire &amp;quot;update to most current NARS source code revision&amp;quot; process will probably take under 3 to 5 minutes total, depending however on your (high-speed) Internet service provider&#039;s(ISP) download speed.&lt;br /&gt;
&lt;br /&gt;
==Folders==&lt;br /&gt;
&lt;br /&gt;
After unzipping the above files, the structure under the &#039;&#039;&#039;NARS2000 root folder&#039;&#039;&#039; should look very much like the following(&#039;&#039;&#039;leftmost column&#039;&#039;&#039;), where lower level sub-directories and individual sub-folder file names have been omitted:&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;| style=&amp;quot;width: 40%; border:1px dotted blue;&amp;quot; &lt;br /&gt;
!&amp;lt;u&amp;gt;&#039;&#039;&#039;NARS2000&#039;&#039;&#039; SubFolder:&amp;lt;/u&amp;gt;&lt;br /&gt;
! &amp;lt;u&amp;gt;Downloaded Zip &#039;&#039;&#039;Source&#039;&#039;&#039; File or Checkout Process:&amp;lt;/u&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| branches\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | Created manually(1)&lt;br /&gt;
|-&lt;br /&gt;
| ecm\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | &#039;&#039;&#039;mplibs&#039;&#039;&#039;.zip&lt;br /&gt;
|-&lt;br /&gt;
| gsl\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | &#039;&#039;&#039;gsldir&#039;&#039;&#039;.zip&lt;br /&gt;
|-&lt;br /&gt;
| mpfr\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | &#039;&#039;&#039;mplibs&#039;&#039;&#039;.zip&lt;br /&gt;
|-&lt;br /&gt;
| mpir\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | &#039;&#039;&#039;mplibs&#039;&#039;&#039;.zip&lt;br /&gt;
|-&lt;br /&gt;
| msieve\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | TortoiseSVN Checkout &#039;&#039;&#039;msieve&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| qdebug\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | &#039;&#039;&#039;qdebug&#039;&#039;&#039;.zip&lt;br /&gt;
|-&lt;br /&gt;
| trunk\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | TortoiseSVN Checkout &#039;&#039;&#039;trunk&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| trunk\binaries\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | TortoiseSVN Checkout &#039;&#039;&#039;trunk&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| trunk\Extensions\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | TortoiseSVN Checkout &#039;&#039;&#039;trunk&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| trunk\htdocs\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | TortoiseSVN Checkout &#039;&#039;&#039;trunk&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| trunk\images\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | TortoiseSVN Checkout &#039;&#039;&#039;trunk&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| trunk\MediaWiki\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | TortoiseSVN Checkout &#039;&#039;&#039;trunk&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| trunk\ReleaseNotes\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | TortoiseSVN Checkout &#039;&#039;&#039;trunk&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
| trunk\WineHQ\&lt;br /&gt;
| class=&amp;quot;Unicode&amp;quot; style=&amp;quot;text-align:center;&amp;quot; | TortoiseSVN Checkout &#039;&#039;&#039;trunk&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
|}&lt;br /&gt;
(1) Subfolder &#039;&#039;&#039;\branches&#039;&#039;&#039; should be &#039;&#039;&#039;created manually&#039;&#039;&#039; (e.g. Windows Explorer, right-click, New, Folder).  It is used to hold subprojects you may develop.  For example if your name is Bill Gates, you might have the following subfolders, each representing a NARS subproject:&amp;lt;br&amp;gt;&lt;br /&gt;
C:\NARS2000\branches\bgates\NARS_Spreadsheets&amp;lt;br&amp;gt;&lt;br /&gt;
C:\NARS2000\branches\bgates\NARS_WordProcPlusAPLEdits&amp;lt;br&amp;gt;&lt;br /&gt;
C:\NARS2000\branches\bgates\EZMenus&amp;lt;br&amp;gt;&lt;br /&gt;
C:\NARS2000\branches\bgates\Graphics&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Choose How To Build==&lt;br /&gt;
&lt;br /&gt;
The following sections describe two alternate ways to build the executable.  One is the GUI interface of VC++ Express, the other is a command line interface using a &#039;&#039;&#039;makefile&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Set Up VC++ Express==&lt;br /&gt;
&lt;br /&gt;
If you are using Visual Studio 2013/VC++ Express, the project file is in the &#039;&#039;&#039;trunk&#039;&#039;&#039; folder and is called &#039;&#039;&#039;NARS2000.vcproj&#039;&#039;&#039;.  You may load it manually every time you invoke VC++ Express, or you may load it automatically by placing the path to the project file on the command line in the VC++ Express shortcut as in &#039;&#039;&#039;&amp;quot;C:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\VCExpress.exe&amp;quot; C:\NARS2000\trunk\NARS2000.vcproj&#039;&#039;&#039; or wherever you defined your NARS2000 root folder.&lt;br /&gt;
&lt;br /&gt;
The vast majority of the project settings are found in the above file with some exceptions.&lt;br /&gt;
&lt;br /&gt;
==Set Up Makefile and Environment Variables==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;hr width=25%&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Windows 8&#039;&#039;&#039;: Setting up Environment and Path Variable(s):&lt;br /&gt;
Under Settings, Control Panel, System and Security, System, Advanced System Settings, Advanced (Tab) &#039;&#039;&#039;or&#039;&#039;&#039; in Control Panel &amp;lt;u&amp;gt;Search&amp;lt;/u&amp;gt; for &#039;&#039;&#039;Environment Variables&#039;&#039;&#039;,&lt;br /&gt;
* Click &#039;&#039;&#039;Environment Variables&#039;&#039;&#039; button - There is both a &#039;&#039;&#039;Temp Variable&#039;&#039;&#039; and &#039;&#039;&#039;Path Variable&#039;&#039;&#039;.&lt;br /&gt;
:: There are 2 sections, User Account Variables and System Variables.  You normally want to add new &#039;&#039;&#039;System Variables&#039;&#039;&#039;.&lt;br /&gt;
::: Click &#039;&#039;&#039;[New]&#039;&#039;&#039; button for a &amp;lt;u&amp;gt;New&amp;lt;/u&amp;gt; System Variable:&lt;br /&gt;
:::: Variable name &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &#039;&#039;&#039;PARGEN&#039;&#039;&#039;&lt;br /&gt;
:::: Variable value &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &#039;&#039;&#039;C:\cygwin64\bin\bison&#039;&#039;&#039; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;lt;&amp;lt; typical for a 64 bit install(for bison.exe in subfolder bin), for 32 bits installs see below for variable &#039;&#039;&#039;set&#039;&#039;&#039; values.&lt;br /&gt;
* Normally add a &#039;&#039;&#039;New&#039;&#039;&#039; variable (var Name plus Value) for each of the &#039;&#039;&#039;eight Set&#039;&#039;&#039; vars commands listed below, 8 environment variable names - such as NARSROOT, CS_DIR, ZIPPRG, PARGEN, etc.&lt;br /&gt;
* If you need to add another Path to an existing variable, each new or added path is separated with a semi-colon.&lt;br /&gt;
* After updating any Environment/Path variable(s) you apparently need to reboot since the above variable changes only affect changes in the Registry until PC is rebooted.&lt;br /&gt;
* The instructions below should also or alternatively work.&lt;br /&gt;
&amp;lt;hr width=25%&amp;gt;&lt;br /&gt;
If you are building from the &#039;&#039;&#039;makefile&#039;&#039;&#039; or working with the GUI C++ Compiler, you&#039;ll need to set &#039;&#039;&#039;eight environment variables&#039;&#039;&#039; in your &#039;&#039;&#039;autoexec.bat&#039;&#039;&#039; file (&#039;&#039;&#039;or&#039;&#039;&#039; see just above for setting Environment Variables via &#039;&#039;&#039;Windows Control Panel&#039;&#039;&#039;). Note that &#039;&#039;Environment variable #n&#039;s&#039;&#039; just below are shown only for helpful reference purposes.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
REM Path of the root of the NARS2000 project *ending with a backslash*&lt;br /&gt;
Set NARSROOT=C:\NARS2000^\ &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; Environment variable #1&lt;br /&gt;
&lt;br /&gt;
REM Path to Doctor Dump SDK root&lt;br /&gt;
Set CS_DIR=C:\DoctorDumpSDK^\ &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;Environment variable #2&lt;br /&gt;
&lt;br /&gt;
REM Path and name of zip program (7-Zip)&lt;br /&gt;
Set ZIPPRG=&amp;quot;C:\Program Files\7-Zip\7z&amp;quot; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; Environment variable #3&lt;br /&gt;
&lt;br /&gt;
REM Path and name of parser generator (bison) &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;Environment variable #4 (next line)&lt;br /&gt;
Set PARGEN=C:\Cygwin\bin\bison &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; OR for a 64-bit install &amp;gt;&amp;gt; &amp;amp;nbsp; Set PARGEN=C:\cygwin64\bin\bison&lt;br /&gt;
&lt;br /&gt;
REM Path and name of makedep program&lt;br /&gt;
Set MAKEDEP=%NARSROOT%makedep.php &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;&amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; Environment variable #5&lt;br /&gt;
&lt;br /&gt;
REM Path and name of the &amp;lt;makepro.php&amp;gt; program&lt;br /&gt;
Set MAKEPRO=%NARSROOT%makepro.php &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;Environment variable #6&lt;br /&gt;
&lt;br /&gt;
REM Folder of SDK (&amp;quot;C:\Program Files\Microsoft SDKs\Windows\v7.0A&amp;quot;)&lt;br /&gt;
Set SDK=U:^\ &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; Environment variable #7&lt;br /&gt;
&lt;br /&gt;
REM MSVC compiler (&amp;quot;C:\Program Files\Microsoft Visual Studio 9.0&amp;quot;)&lt;br /&gt;
Set MSVC=V:\VC^\ &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; Environment variable #8&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&amp;lt;hr width=&amp;quot;75%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;u&amp;gt;&#039;&#039;&#039;Mapping Virtual Drive Letters:&#039;&#039;&#039;&amp;lt;/u&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
You will be using Windows &#039;&#039;&#039;subst&#039;&#039;&#039; command to map drive letters as references to drives &#039;&#039;&#039;U:&#039;&#039;&#039; and &#039;&#039;&#039;V:&#039;&#039;&#039; that several of the above &#039;&#039;&#039;environment variables&#039;&#039;&#039; refer to.  Microsoft explanation of &amp;lt;span class=&amp;quot;plainlinks&amp;quot;&amp;gt;&#039;&#039;&#039;[https://technet.microsoft.com/en-us/library/bb491006.aspx subst command here]&#039;&#039;&#039;.&amp;lt;/span&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Modify your C:\AutoExec.bat file to include something approximating the following highlighted text(version#/32/64 bit installs each vary), &#039;&#039;&#039;include&#039;&#039;&#039; the enclosing quote chars just below:&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;subst U: &amp;quot;C:\Program Files\Microsoft SDKs\Windows\v7.0A&amp;quot;&#039;&#039;&#039; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp;(or whatever your current version is)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;subst V: &amp;quot;C:\Program Files\Microsoft Visual Studio 9.0&amp;quot;&#039;&#039;&#039; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; (ditto re version  9.0=Visual Studio 2008)&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
If you do &amp;lt;u&amp;gt;not have&amp;lt;/u&amp;gt; an &#039;&#039;&#039;AutoExec.bat&#039;&#039;&#039; file (many &#039;&#039;&#039;Windows 7 and 8&#039;&#039;&#039; users may not):&lt;br /&gt;
: Create a &amp;lt;u&amp;gt;new text document&amp;lt;/u&amp;gt; using Windows File Explorer, rename it as AutoExec.bat and move(or copy) it to the &#039;&#039;&#039;C:\&#039;&#039;&#039; drive folder &#039;&#039;&#039;with the above two subst&#039;&#039;&#039; commands in it.&lt;br /&gt;
: Windows 7 and 8 users: File AutoExec.bat no longer automatically gets run at system-user boot-up so &#039;&#039;&#039;place a Shortcut to AutoExec.bat&#039;&#039;&#039; in the Program files &#039;&#039;&#039;Startup&#039;&#039;&#039; folder location(navigate Windows File Explorer to &#039;&#039;&#039;one&#039;&#039;&#039; of the below locations, right-click, &#039;&#039;&#039;New&#039;&#039;&#039;, &#039;&#039;&#039;Shortcut&#039;&#039;&#039;, &#039;&#039;&#039;AutoExec.bat&#039;&#039;&#039;).  The Windows 7/8 Startup Folder usually is located as follows:&lt;br /&gt;
:: C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; (general/all users Startup folder) &#039;&#039;&#039;OR&#039;&#039;&#039;&lt;br /&gt;
:: C:\Users\&#039;&#039;&#039;UserName&#039;&#039;&#039;\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; (single user Startup folder, &#039;&#039;&#039;UserName varies&#039;&#039;&#039;)&lt;br /&gt;
&#039;&#039;&#039;IMPORTANT&#039;&#039;&#039;: A successfully mapped &#039;&#039;&#039;V&#039;&#039;&#039; drive should contain a sub-sub-subfolder which then contains the &#039;&#039;&#039;amd64\nmake.exe&#039;&#039;&#039; (64-bit systems) file or &#039;&#039;&#039;bin\nmake.exe&#039;&#039;&#039; (32-bit systems), e.g. &#039;&#039;&#039;typical&#039;&#039;&#039; 64-bit configuration/location:&amp;lt;br&amp;gt;&#039;&#039;&#039;C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin\amd64\nmake.exe&#039;&#039;&#039;.&lt;br /&gt;
:The V drive map would &#039;&#039;&#039;only&#039;&#039;&#039; include linking through subfolder &#039;&#039;&#039;\Visual Studio 9.0&#039;&#039;&#039;.  After creating the linked drives, just &#039;&#039;&#039;check&#039;&#039;&#039; to make sure your mapped &#039;&#039;&#039;V&#039;&#039;&#039; drive has the &#039;&#039;&#039;nmake.exe&#039;&#039;&#039; contained one or several subfolder levels below it. The NARS2000.exe automated Compile/Build uses &#039;&#039;&#039;nmake.exe&#039;&#039;&#039; during exe construction.  64-bit installs require the &#039;&#039;&#039;amd64\nmake.exe&#039;&#039;&#039; file - paradoxically even if your machine&#039;s chipset is Intel, a minor Microsoft variation.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Typical mapped configurations just below, but again each install/version# may vary:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;U&#039;&#039;&#039; = &amp;amp;nbsp; &amp;amp;nbsp; &#039;&#039;&#039;C:\Program Files\Microsoft SDKs\Windows\v7.0A&#039;&#039;&#039; &amp;amp;nbsp; &amp;amp;nbsp; (or v6.0A or whatever your downloaded/current version is)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;V&#039;&#039;&#039; = &amp;amp;nbsp; &amp;amp;nbsp; &#039;&#039;&#039;C:\Program Files\Microsoft Visual Studio 9.0&#039;&#039;&#039; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; (or &#039;&#039;&#039;C:\Program Files (x86)\Microsoft Studio 9.0&#039;&#039;&#039; for 64-bit installs, again look for nmake.exe in a subfolder)&amp;lt;br&amp;gt;&lt;br /&gt;
As a &#039;&#039;&#039;check&#039;&#039;&#039; to make sure the &#039;&#039;&#039;subst&#039;&#039;&#039; commands worked, there should now be &#039;&#039;&#039;2 new drive letters visible in Windows Explorer, in the leftmost window for virtual drives/mapped folders - U and V&#039;&#039;&#039;.  &#039;&#039;To avoid having to reboot&#039;&#039; at present, just &#039;&#039;&#039;open&#039;&#039;&#039;(not edit but run) &#039;&#039;&#039;AutoExec.bat AFTER&#039;&#039;&#039; making sure it is 100% correctly configured.  Having a correctly configured AutoExec.bat file will ensure not having to manually link drives U and V each time the NARS2000.exe is built-rebuilt.&lt;br /&gt;
&amp;lt;hr width=&amp;quot;40%&amp;quot;&amp;gt;&lt;br /&gt;
If you install NARS project tools in other folders, make appropriate changes to the above mappings.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Lastly don&#039;t forget:&#039;&#039;&#039; To append three folders: &#039;&#039;&#039;C:\cygwin64\bin&#039;&#039;&#039; , &#039;&#039;&#039;V:\Common7\IDE&#039;&#039;&#039; and &#039;&#039;&#039;C:\PHP&#039;&#039;&#039; to your &#039;&#039;&#039;Path&#039;&#039;&#039; variable &#039;&#039;&#039;PATH=%PATH%;C:\cygwin64\bin;V:\Common7\IDE;C:\PHP&#039;&#039;&#039; or see &#039;&#039;&#039;Control Panel&#039;&#039;&#039; search for &#039;&#039;&#039;Path&#039;&#039;&#039;, then &#039;&#039;&#039;Edit&#039;&#039;&#039; System Environment Variables for your account, system variable named &#039;&#039;&#039;Path&#039;&#039;&#039;; append to that &#039;&#039;&#039;Path&#039;&#039;&#039; variable &amp;amp;nbsp; &#039;&#039;&#039;;C:\cygwin64\bin;V:\Common7\IDE;C:\PHP&#039;&#039;&#039; &amp;amp;nbsp; - (three additional paths, semicolon separated) so Visual C&#039;s &#039;&#039;&#039;Make&#039;&#039;&#039; plus &#039;&#039;&#039;Compiler&#039;&#039;&#039; can find DLLs, exe&#039;s and Tools you have so diligently downloaded, then installed.&lt;br /&gt;
&lt;br /&gt;
==Pre First Compile and Localization Notes==&lt;br /&gt;
&lt;br /&gt;
Make/Compile local Environment Variable &#039;&#039;&#039;%NARSROOT%&#039;&#039;&#039; is presently set using file &#039;&#039;&#039;C:\NARS2000\trunk\wcustomize.bat&#039;&#039;&#039;.  This bat file is called by other major trigger-compile bat files such as mk32.bat, mk64.bat, w32.bat and w64.bat - which oversee-initiate compilation.  The %NARSROOT% environment variable is important in indicating &amp;lt;u&amp;gt;where&amp;lt;/u&amp;gt; Make/Compilation will occur.  &amp;lt;u&amp;gt;Before&amp;lt;/u&amp;gt; first locally compiling NARS2000, you likely need to manually edit (using Notepad or a local text file editor) file &amp;lt;u&amp;gt;&#039;&#039;&#039;trunk\wcustomize.bat&#039;&#039;&#039;&amp;lt;/u&amp;gt; and make sure the following are initially correct per your &#039;local PC NARS installation&#039; i.e. within wcustomize.bat:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Set NARSROOT=C:\NARS2000^\&#039;&#039;&#039; &amp;amp;nbsp; &amp;amp;nbsp; &amp;amp;nbsp; (Note: &#039;&#039;&#039;No %&#039;&#039;&#039; symbols are needed in &amp;lt;u&amp;gt;set/specification&amp;lt;/u&amp;gt; rows in wcustomize.bat, e.g. replace &#039;R:\NARS2000&#039; to &#039;C:\NARS2000&#039; as shown at left)&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Set CS_DIR=C:\DoctorDumpSDK^\&#039;&#039;&#039; &amp;amp;nbsp; &amp;amp;nbsp; (again R:\ was changed to C:\)&amp;lt;br&amp;gt;&lt;br /&gt;
The additional hat(^) symbol in the above bat commands is needed for directory/folder recombination purposes, essentially sub-directory parse-point identification and or recombination point, where NARS may use subdirectories/parsing.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Prior&#039;&#039;&#039; to using &#039;&#039;&#039;Visual Studio&#039;&#039;&#039; and its &#039;&#039;&#039;IDE&#039;&#039;&#039;(integrated developer&#039;s environment) for NARS Building/Compilation purposes a first time, and to help ensure the proper installation of NARS source code - it is very helpful/necessary to open a CMD.EXE window using &amp;lt;big&amp;gt;&#039;&#039;&#039;Windows Start&#039;&#039;&#039;, &#039;&#039;&#039;CMD.EXE&#039;&#039;&#039;&amp;lt;/big&amp;gt;.  This will open up a small CMD window.  While &amp;lt;big&amp;gt;inside the opened CMD.EXE window&amp;lt;/big&amp;gt;, navigate to your local C:\NARS2000\trunk folder, using &amp;lt;big&amp;gt;&#039;&#039;&#039;cd C:\NARS2000\trunk&#039;&#039;&#039;&amp;lt;/big&amp;gt; where cd represents change directory.  Now run &amp;lt;big&amp;gt;&#039;&#039;&#039;mk32.bat&#039;&#039;&#039;&amp;lt;/big&amp;gt; by typing it in, to compile NARS2000&#039;s 32-bit executable.  If mk32.bat is successful and if your installation is 100% correct, two identical files in separate folders will be created(built and compiled) using bat commands from inside that CMD window/session:&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;C:\NARS2000\trunk\RET\ND32\NARS2000.exe&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;C:\NARS2000\trunk\binaries\ND32\NARS2000.exe&#039;&#039;&#039;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
If that 32-bit NARS make/build was successful, then from the same CMD.EXE window, type &amp;lt;big&amp;gt;&#039;&#039;&#039;mk64.bat&#039;&#039;&#039;&amp;lt;/big&amp;gt;. This should likewise compile locally the &#039;&#039;&#039;64-bit&#039;&#039;&#039; NARS Executable, with again two resulting &#039;&#039;&#039;exe output files:&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;C:\NARS2000\trunk\RET\ND64\NARS2000.exe&#039;&#039;&#039;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;C:\NARS2000\trunk\binaries\ND64\NARS2000.exe&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Successfully completing mk32.bat and mk64.bat along with presence of their respective &#039;&#039;&#039;NARS2000.exe&#039;&#039;&#039; output files generally confirm successful installation of NARS source code, as well as correct installation for several associated tandem utility tools re compiling NARS2000.exe on your server, PC, notebook or tablet computer.&lt;br /&gt;
&lt;br /&gt;
==Building The Executable==&lt;br /&gt;
&lt;br /&gt;
Congratulations, if you&#039;ve successfully arrived at this section, your resume now includes such useful terms as software installation wizard and relentless software engineering candidate.  You are part of an elite group - the few, the proud, NARS geek marines; also known as tomorrow&#039;s APL-symbol-set event-horizon squad.  You&#039;ve managed to easily or otherwise cross several potentially deep programming ravines in the process.&lt;br /&gt;
&lt;br /&gt;
At this point you should be ready to build the executable, again - this time however from inside Visual Studio&#039;s IDE(integrated developer&#039;s environment).  There are two general ways to build NARS executable.  Method one: Involves the time-honored command-line batch file compile mode using files mk32.bat or mk64.bat - as you should have previously discovered in the section &#039;&#039;&#039;[[#Pre_First_Compile_and_Localization_Notes|Pre First Compile and Localization Notes]]&#039;&#039;&#039; while using Windows CMD.EXE.&lt;br /&gt;
&lt;br /&gt;
Method two: Involves again first opening a (Windows Start button) &#039;&#039;&#039;CMD.EXE&#039;&#039;&#039; window and running &#039;&#039;&#039;w32.bat start&#039;&#039;&#039; (all one command) or &#039;&#039;&#039;w64.bat start&#039;&#039;&#039;.  Immediately or shortly, you should see Visual Studio 2013&#039;s program visualize, load and run - with either the 32-bit or 64-bit NARS2000 project/program loaded.  After Visual Studio 2013 finishes loading - simply click Build.  Full use of Visual Studio 2013&#039;s IDE (integrated developer&#039;s environment) should now be available for you to experiment with, develop code on, debug and customize APL as you may choose.  Your first time through with running &#039;&#039;&#039;w32.bat start&#039;&#039;&#039; and &#039;&#039;&#039;w64.bat start&#039;&#039;&#039;:&lt;br /&gt;
* There is usually a Visual Studio &#039;&#039;&#039;One Way Migration&#039;&#039;&#039; message which displays.  This is normal, TBE(to be expected), and yes you DO at that point want to migrate the NARS2000 project to Visual Studio 2013.  There are usually roughly 20 migration warnings which also show up in an Internet Browser page re the Migration Report - again, all normally to be expected.  However, there should be &#039;&#039;&#039;&amp;lt;u&amp;gt;zero errors&amp;lt;/u&amp;gt;&#039;&#039;&#039; in the migration report.&lt;br /&gt;
* If all went satisfactorily well with the Migration, you should be able to select/choose/Click &#039;&#039;&#039;Build Solution&#039;&#039;&#039; under Build in VS2013&#039;s IDE to fully compile NARS2000 executable.  After Build, there should likewise be zero errors.&lt;br /&gt;
&lt;br /&gt;
Special note regarding &#039;&#039;&#039;w32.bat start&#039;&#039;&#039; and &#039;&#039;&#039;w64.bat start&#039;&#039;&#039; while in Visual Studio&#039;s IDE for the NARS2000 project:&lt;br /&gt;
When &amp;lt;u&amp;gt;switching&amp;lt;/u&amp;gt; between 32 and 64-bit versions, i.e. w32.bat start &#039;&#039;&#039;versus&#039;&#039;&#039; w64.bat start: There is a &#039;&#039;&#039;Property&#039;&#039;&#039; adjustment required when using Visual Studio&#039;s IDE.  After Visual Studio opens up and in the Solution Explorer window (usually on the upper right hand side of your screen) click on &amp;quot;Solution &#039;nars2000&#039; (1 project).&amp;quot;  This should then show a Properties Window just below it.  Look for a line which reads: &#039;&#039;&#039;Active config&#039;&#039;&#039;.  If you ran w32.bat start then Active config should have a value of &#039;&#039;&#039;Debug32|Win32&#039;&#039;&#039;.  If you ran w64.bat start then Active config should have a value of &#039;&#039;&#039;Debug64|Win32&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== NARS Systems Developer Suggested Knowledge Prequisites ==&lt;br /&gt;
&lt;br /&gt;
For a strongly recommended set of knowledge prerequisites - in order to effectively understand, maintain or improve NARS functionality - please see &#039;&#039;&#039;[[NARS System Developer Suggested Knowledge Prerequisites|NARS System Developer Suggested Knowledge Prerequisites]]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Developer Experiments with NARS Source Code==&lt;br /&gt;
&lt;br /&gt;
This section is for Developers who have successfully downloaded NARS source code and want to Experiment with it, or further develop NARS APL Interpreter&#039;s source code.&lt;br /&gt;
&lt;br /&gt;
For development and debugging purposes: You as APL Interpreter developer normally want to want to &amp;lt;u&amp;gt;first&amp;lt;/u&amp;gt; write new source code/model using the &amp;lt;u&amp;gt;32-bit version&amp;lt;/u&amp;gt; of NARS2000 (w32.bat start).  This is because the 32-bit version is easier to debug than the 64-bit version; error messages can be less complex.  Migrating &#039;&#039;&#039;correct source code&#039;&#039;&#039; forward from the 32-bit version to the 64-bit version is also easier than a reverse migration.&lt;br /&gt;
&lt;br /&gt;
You will also at some point still need to be synched-with or later synch-back-to NARS online source code - i.e. after experimenting/changing local PC source code.  This is equivalent to a ChemLab 101 at home/home-office and cleaning up all experiments at the end of the chemistry class, except as it applies to software developers, NARS software developers, and or those inclined to experiment safely.&lt;br /&gt;
&lt;br /&gt;
Here is where Tortoise SVN provides excellent and time-tested source-code clean-up tools for your local PC, including &#039;&#039;&#039;Resolve, Revert, Clean up, and Undo changes&#039;&#039;&#039;.  Pull up these TortoiseSVN utilities by navigating Windows File Explorer to directory C:\NARS2000.  If you successfully previously downloaded and Installed TortoiseSVN and NARS2000 source code, as outlined earlier/above, you may right click on say the \trunk subfolder in C:\NARS2000.  A mouse right-click on \trunk should show an option labeled TortoiseSVN.  Further choosing/selecting TortoiseSVN should then reveal multiple clean up options - Resolve, Revert, Clean up and Undo changes.&amp;lt;br&amp;gt;&#039;&#039;&#039;TortoiseSVN Documentation on:&#039;&#039;&#039;&amp;lt;br&amp;gt;[http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-cleanup.html Clean up.]&amp;lt;br&amp;gt;[http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-revert.html Undo Changes.]&amp;lt;br&amp;gt;[http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-conflicts.html Resolving Conflicts.]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
At least one method to safely synch-back-to NARS is to:&lt;br /&gt;
# Select &#039;&#039;&#039;TortoiseSVN&#039;&#039;&#039; after right-clicking on the trunk folder&lt;br /&gt;
# Select &#039;&#039;&#039;Revert&#039;&#039;&#039;, click &#039;&#039;&#039;OK&#039;&#039;&#039;, let it run.&lt;br /&gt;
# Select &#039;&#039;&#039;Clean up&#039;&#039;&#039;, check &#039;&#039;&#039;Refresh shell overlays&#039;&#039;&#039;, click &#039;&#039;&#039;OK&#039;&#039;&#039;, let it run.&lt;br /&gt;
Per TortoiseSVN there should again be green check marks appearing on your trunk folder as well as your msieve folder.&lt;br /&gt;
&lt;br /&gt;
For revision tracking and long-term software program maintenance purposes: &#039;&#039;&#039;Keep track of which files (file names) you personally modify, including a brief purpose&#039;&#039;&#039; for that edit.  You will need to this information later for Release Notes purposes (see folder C:\NARS2000\trunk\ReleaseNotes for best-practice-examples of developer note-taking) and if you later synch to a new online NARS version, you may have to carry-forward your edit changes into a newly downloaded set of NARS source code files which may or may not reflect your prior local computer edit changes.&lt;br /&gt;
&lt;br /&gt;
==Periodic NARS Updates==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Incremental Update&amp;lt;/u&amp;gt; - Method 1:&amp;lt;br&amp;gt;&lt;br /&gt;
Periodically, NARS APL interpreter developers should ensure changes done by other developers get incorporated into their local machine&#039;s source code working copy. This is the process of integrating/downloading changes from NARS SourceForge server &#039;&#039;&#039;&amp;lt;u&amp;gt;to&amp;lt;/u&amp;gt;&#039;&#039;&#039; your local copy. Updating may be performed on single files, a set of selected files, or recursively on entire directory hierarchies. To update, select the files and/or &#039;&#039;&#039;directories&#039;&#039;&#039; you want (usually \trunk and or \msieve), right click and select &#039;&#039;&#039;TortoiseSVN → Update&#039;&#039;&#039; in the explorer context menu for that trunk or msieve folder. A window will pop up displaying the progress of the update as it runs. Changes done by other developers will be merged into your local files, &#039;&#039;&#039;keeping&#039;&#039;&#039; any changes you may have done to the same files - if you did not want to keep your local changes but do want to keep the downloaded changes, select TortoiseSVN and Revert &#039;&#039;&#039;prior&#039;&#039;&#039; to running TortoiseSVN Update. NARS repository at SourceForge is &#039;&#039;&#039;not&#039;&#039;&#039; affected by an update to your local copy. [http://tortoisesvn.net/docs/nightly/TortoiseSVN_en/tsvn-dug-update.html Update Your Working Copy With Changes From Others]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;u&amp;gt;Total Source Code Replacement&amp;lt;/u&amp;gt; - Method 2:&amp;lt;br&amp;gt;&lt;br /&gt;
For example from version r1325 to say version r1364 (note a significant revision/datetime gap between 1325 and 1364, hypothetically), whatever NARS latest revision number is.  Total code replacement may be preferred over incremental updating when major structural changes or significant source code changes are newly in situ.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
Total Replacement Process: Visually scan NARS source code page at http://sourceforge.net/p/nars2000/code/HEAD/tree/trunk/ and review the top 25 to 40 file entries or so, while mentally keeping track of the &#039;&#039;&#039;highest revision number found&#039;&#039;&#039;(e.g. r1379). If after your last/earlier TortoiseSVN Update, your local version number is lower than the latest revision number visually found online, then perform the following to update to the most recent NARS revision:&lt;br /&gt;
# Rename your existing NARS folder to something approximating C:\NARS2000_old_rev&lt;br /&gt;
# Create an entirely new C:\NARS2000 folder&lt;br /&gt;
# &#039;&#039;&#039;Copy all folders and files at the &amp;lt;u&amp;gt;top level&amp;lt;/u&amp;gt;&#039;&#039;&#039; from C:\NARS2000_old_rev folder into C:\NARS2000 &#039;&#039;&#039;EXCEPT \trunk and \msieve subfolders (and their contents)&#039;&#039;&#039;.  The \trunk and \msieve folders will shortly be downloaded from SourceForge.&lt;br /&gt;
# Create &#039;&#039;&#039;new empty folders called \trunk and \msieve&#039;&#039;&#039; in the new C:\NARS2000 folder.&lt;br /&gt;
# Revisit the section above called &#039;&#039;&#039;[[#Check_Out_The_Source_Code|Check Out The Source Code]]&#039;&#039;&#039; to again checkout/download to the absolute latest NARS version number, for both \trunk and \msieve folders.&lt;br /&gt;
# Also revisit &#039;&#039;&#039;[[#Pre_First_Compile_and_Localization_Notes|Pre First Compile and Localization Notes]]&#039;&#039;&#039; and text edit file \trunk\wcustomize.bat to localize the new version.&lt;br /&gt;
# Folder C:\NARS2000_old_rev may be &#039;&#039;&#039;Recycled&#039;&#039;&#039; after you are done copying non-trunk and non-msieve files/folders from it into your new C:\NARS2000 folder.  If disk space is not restrictive and for 100% safety purposes, keep your prior folder available until after successfully &#039;&#039;&#039;Building/Compiling&#039;&#039;&#039; the newly downloaded 32-bit and 64-bit versions, and making sure you did not have any local personal changes now potentially being recycled.&lt;br /&gt;
&lt;br /&gt;
[[Category:NARS 2000]]&lt;/div&gt;</summary>
		<author><name>Paul Robinson</name></author>
	</entry>
</feed>