Strand notation

From APL Wiki
Revision as of 10:34, 11 September 2022 by Adám Brudzewsky (talk | contribs) (Text replacement - "<source" to "<syntaxhighlight")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search
1 2 3

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:

  • 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 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 (a;b;c).
  • BQN breaks backwards compatibility with APL and does not allow stranding by juxtaposition even for numbers. Instead, the "ligature" character 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 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.


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


APL syntax [edit]
General Comparison with traditional mathematicsPrecedenceTacit programming (Train, Hook, Split composition)
Array Numeric literalStringStrand notationObject literalArray notation (design considerations)
Function ArgumentFunction valenceDerived functionDerived operatorNiladic functionMonadic functionDyadic functionAmbivalent functionDefined function (traditional)DfnFunction train
Operator OperandOperator valenceTradopDopDerived operator
Assignment MultipleIndexedSelectiveModified
Other Function axisBracket indexingBranchStatement separatorQuad nameSystem commandUser commandKeywordDot notationFunction-operator overloadingControl structureComment