Strand notation: Difference between revisions

Jump to navigation Jump to search
622 bytes added ,  08:29, 8 February 2021
no edit summary
Miraheze>Adám Brudzewsky
No edit summary
No edit summary
(7 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{| class=vertical-navbox style="float:right; font-size:500%; margin:0 1ex;"
|<code>1 2 3</code>
|}
'''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 [[operator]]s are allowed to take array [[operand]]s, and can be resolved by inserting extra parentheses or [[identity function]]s into the expression.
'''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 [[operator]]s are allowed to take array [[operand]]s, and can be resolved by inserting extra parentheses or [[identity function]]s into the expression.


Several variations on stranding exist:
Several variations on stranding exist:
* In [[Dyalog APL]], [[NARS2000]] and others, arrays are stranded before operator or function evaluation.
* In [[Dyalog APL]], [[NARS2000]], [[APL.68000]], and others, arrays are stranded before operator or function evaluation.
* In [[APL2]], [[APLX]] and others, arrays are stranded after operator evaluation and bracket indexing, but before function evaluation.
* In [[APL2]], [[APLX]] and others, arrays are stranded after operator evaluation and bracket indexing, but before function evaluation.
* In [[APL\360]], [[SHARP APL]] and [[J]] stranding is called '''vector notation''' and is a part of token formation rather than execution. Only plain numbers are stranded.
* In [[APL\360]], [[SHARP APL]] and [[J]] stranding is called '''vector notation''' and is a part of token formation rather than execution. Only plain numbers are stranded.
* In [[A+]] a system equivalent to APL\360 is implemented, but is described as part of [[numeric literal]] notation. "Stranding" in A+ refers to vector notation using parentheses and semicolons <source lang=apl inline>(a;b;c)</source>.
* [[BQN]] breaks [[backwards compatibility]] with APL and does not allow stranding by juxtaposition even for numbers. Instead, the "ligature" character <code>‿</code> is used for a more explicit variation of stranding.


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]]:
Line 10: Line 15:
f⍣3 0.8
f⍣3 0.8
</source>
</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 [[Identity|tack function]].
<source lang=apl>
<source lang=apl>
(f⍣3)0.8
(f⍣3)0.8
Line 21: Line 26:
=== Documentation ===
=== Documentation ===


* [http://help.dyalog.com/latest/index.htm#Language/Introduction/Variables/Vector%20Notation.htm Dyalog]
* [https://help.dyalog.com/latest/index.htm#Language/Introduction/Variables/Vector%20Notation.htm Dyalog]
* [http://microapl.com/apl_help/ch_020_010_130.htm APLX]
* [http://microapl.com/apl_help/ch_020_010_130.htm APLX]


{{APL programming language}}
{{APL syntax}}[[Category:APL syntax]][[Category:Nested array model]]

Navigation menu