Link: Difference between revisions
Line 37: | Line 37: | ||
What we really wanted was: | What we really wanted was: | ||
<source lang=apl> | <source lang=apl> | ||
1 2⊃3 4⊃<<5 6 | |||
┌───┬───┬─────┐ | ┌───┬───┬─────┐ | ||
│1 2│3 4│┌───┐│ | │1 2│3 4│┌───┐│ | ||
Line 42: | Line 43: | ||
│ │ │└───┘│ | │ │ │└───┘│ | ||
└───┴───┴─────┘ | └───┴───┴─────┘ | ||
</source> | </source>{{Works in|[[SHARP APL]]}} | ||
Link is different from [[Pair]] <source lang=apl inline>⍮</source>, as Pair simply encloses both arguments and always produces a length-2 vector, so it cannot be used to construct a long nested array of uniform depth like Link does. | Link is different from [[Pair]] <source lang=apl inline>⍮</source>, as Pair simply encloses both arguments and always produces a length-2 vector, so it cannot be used to construct a long nested array of uniform depth like Link does. |
Revision as of 14:11, 16 June 2020
⊃
|
Link (⊃
), or ;
in J, is a dyadic primitive function which builds a nested vector out of the two arguments. Link is useful for building a nested array when stranding by juxtaposition is not available. Link first appeared as an extension to SHARP APL[1].
Examples
Link implements {(⊂⍺),⊆⍵}
, that is, the concatenation of enclose of the left argument and nest (enclose if simple) of the right argument. This allows to chain the function over multiple arrays to form a nested array. Note that both SHARP APL and J use flat array model, so they allow boxing of a simple scalar.
1 2⊃3 4⊃5 6 ┌───┬───┬───┐ │1 2│3 4│5 6│ └───┴───┴───┘ 1⊃2⊃3 ┌─┬─┬─┐ │1│2│3│ └─┴─┴─┘
Because of the function's asymmetric nature, oddities may appear if the arrays are chained in a wrong order:
(1 2⊃3 4)⊃5 6 ┌─────────┬───┐ │┌───┬───┐│5 6│ ││1 2│3 4││ │ │└───┴───┘│ │ └─────────┴───┘
Similarly, the chaining fails if the rightmost array is already nested:
1 2⊃3 4⊃<5 6 ┌───┬───┬───┐ │1 2│3 4│5 6│ └───┴───┴───┘
What we really wanted was:
1 2⊃3 4⊃<<5 6 ┌───┬───┬─────┐ │1 2│3 4│┌───┐│ │ │ ││5 6││ │ │ │└───┘│ └───┴───┴─────┘
Link is different from Pair ⍮
, as Pair simply encloses both arguments and always produces a length-2 vector, so it cannot be used to construct a long nested array of uniform depth like Link does.
External links
Documentation
- J Dictionary, NuVoc
References
- ↑ "Language Extensions of May 1983". SATN-45, 1983-05-02.