Strand notation: Difference between revisions

From APL Wiki
Jump to navigation Jump to search
Miraheze>Marshall
No edit summary
Miraheze>Adám Brudzewsky
No edit summary
Line 2: Line 2:


Several variations on stranding exist:
Several variations on stranding exist:
* [[SHARP APL]] has no notion of array stranding.
* [[SHARP APL]] have no notion of array stranding.
* In [[APL2]] arrays are stranded before operator or function evaluation.
* In [[APL2]] arrays are stranded before operator or function evaluation.
* In some APLs (???) arrays are stranded after operator evaluation but before function evaluation.
* In some APLs (???) arrays are stranded after operator evaluation but before function evaluation.
Line 8: Line 8:


An example in which stranding interferes with the most obvious way of writing a program is shown below. Consider applying the function <source lang=apl inline>f</source> to <source lang=apl inline>0.8</source> three times using the [[Power operator]]:
An example in which stranding interferes with the most obvious way of writing a program is shown below. Consider applying the function <source lang=apl inline>f</source> to <source lang=apl inline>0.8</source> three times using the [[Power operator]]:
<pre class=apl>
<source lang=apl>
f⍣3 0.8
f⍣3 0.8
</pre>
</source>
In a language which strands before function application, this expression is equivalent to the derived function <source lang=apl inline>f⍣(3,0.8)</source>. Not what was intended! The two numbers must be separated somehow, for instance with parentheses or a [[tack function]].
In a language which strands before function application, this expression is equivalent to the derived function <source lang=apl inline>f⍣(3,0.8)</source>. Not what was intended! The two numbers must be separated somehow, for instance with parentheses or a [[tack function]].
<pre class=apl>
<source lang=apl>
(f⍣3)0.8
(f⍣3)0.8
f⍣3⊢0.8
f⍣3⊢0.8
</pre>
</source>
For operators that take array operands, such as the [[Rank operator]], stranding before operator application can be beneficial. Without it, a function with two ranks such as <source lang=apl inline>⊥⍤0 1</source> would have to be written with parentheses <source lang=apl inline>⊥⍤(0 1)</source>.
For operators that take array operands, such as the [[Rank operator]], stranding before operator application can be beneficial. Without it, a function with two ranks such as <source lang=apl inline>⊥⍤0 1</source> would have to be written with parentheses <source lang=apl inline>⊥⍤(0 1)</source>.



Revision as of 22:10, 30 October 2019

Strand notation, or stranding, is the convention that multiple (more than one) arrays written next to each other are automatically combined into a vector. Stranding can make code easier to read by eliminating the need for punctuation when writing small arrays in APL. It can also cause frustration when programming if unrelated arrays are stranded together. This issue occurs when operators are allowed to take array operands, and can be resolved by inserting extra parentheses or identity functions into the expression.

Several variations on stranding exist:

  • SHARP APL have no notion of array stranding.
  • In APL2 arrays are stranded before operator or function evaluation.
  • In some APLs (???) arrays are stranded after operator evaluation but before function evaluation.
  • In J stranding is a part of token formation rather than execution. Only plain numbers are stranded.

An example in which stranding interferes with the most obvious way of writing a program is shown below. Consider applying the function f to 0.8 three times using the Power operator:

f⍣3 0.8

In a language which strands before function application, this expression is equivalent to the derived function f⍣(3,0.8). Not what was intended! The two numbers must be separated somehow, for instance with parentheses or a tack function.

(f⍣3)0.8
f⍣3⊢0.8

For operators that take array operands, such as the Rank operator, stranding before operator application can be beneficial. Without it, a function with two ranks such as ⊥⍤0 1 would have to be written with parentheses ⊥⍤(0 1).

External links

Documentation

Dyalog