Link: Difference between revisions
m (Text replacement - "</source>" to "</syntaxhighlight>") |
|||
Line 1: | Line 1: | ||
{{Built-in|Link|⊃}}, or <source lang=j inline>;</ | {{Built-in|Link|⊃}}, or <source lang=j inline>;</syntaxhighlight> in [[J]], is a [[dyadic]] [[primitive function]] which builds a [[nested]] [[vector]] out of the two [[argument|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]]<ref>[https://www.jsoftware.com/papers/satn45.htm "Language Extensions of May 1983"]. SATN-45, 1983-05-02.</ref>. | ||
== Examples == | == Examples == | ||
Link implements <source lang=apl inline>{(⊂⍺),⊆⍵}</ | Link implements <source lang=apl inline>{(⊂⍺),⊆⍵}</syntaxhighlight> or <source lang=apl inline>,⍨∘⊂⍨∘⊆</syntaxhighlight>, that is, the [[catenate|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]]. | ||
<source lang=apl> | <source lang=apl> | ||
Line 14: | Line 14: | ||
│1│2│3│ | │1│2│3│ | ||
└─┴─┴─┘ | └─┴─┴─┘ | ||
</ | </syntaxhighlight>{{Works in|[[SHARP APL]]}} | ||
Because of the function's asymmetric nature, oddities may appear if the arrays are chained in a wrong order: | Because of the function's asymmetric nature, oddities may appear if the arrays are chained in a wrong order: | ||
Line 25: | Line 25: | ||
│└───┴───┘│ │ | │└───┴───┘│ │ | ||
└─────────┴───┘ | └─────────┴───┘ | ||
</ | </syntaxhighlight>{{Works in|[[SHARP APL]]}} | ||
Similarly, the chaining fails if the rightmost array is already nested: | Similarly, the chaining fails if the rightmost array is already nested: | ||
Line 34: | Line 34: | ||
│1 2│3 4│5 6│ | │1 2│3 4│5 6│ | ||
└───┴───┴───┘ | └───┴───┴───┘ | ||
</ | </syntaxhighlight>{{Works in|[[SHARP APL]]}} | ||
What we really wanted was: | What we really wanted was: | ||
<source lang=apl> | <source lang=apl> | ||
Line 43: | Line 43: | ||
│ │ │└───┘│ | │ │ │└───┘│ | ||
└───┴───┴─────┘ | └───┴───┴─────┘ | ||
</ | </syntaxhighlight>{{Works in|[[SHARP APL]]}} | ||
Link is different from [[Pair]] <source lang=apl inline>⍮</ | Link is different from [[Pair]] <source lang=apl inline>⍮</syntaxhighlight>, 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 == | == External links == |
Revision as of 20:58, 10 September 2022
⊃
|
Link (⊃
), or <source lang=j inline>;</syntaxhighlight> 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 <source lang=apl inline>{(⊂⍺),⊆⍵}</syntaxhighlight> or <source lang=apl inline>,⍨∘⊂⍨∘⊆</syntaxhighlight>, 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.
<source lang=apl>
1 2⊃3 4⊃5 6
┌───┬───┬───┐ │1 2│3 4│5 6│ └───┴───┴───┘
1⊃2⊃3
┌─┬─┬─┐ │1│2│3│ └─┴─┴─┘
</syntaxhighlight>
Because of the function's asymmetric nature, oddities may appear if the arrays are chained in a wrong order:
<source lang=apl>
(1 2⊃3 4)⊃5 6
┌─────────┬───┐ │┌───┬───┐│5 6│ ││1 2│3 4││ │ │└───┴───┘│ │ └─────────┴───┘
</syntaxhighlight>
Similarly, the chaining fails if the rightmost array is already nested:
<source lang=apl>
1 2⊃3 4⊃<5 6
┌───┬───┬───┐ │1 2│3 4│5 6│ └───┴───┴───┘
</syntaxhighlight>
What we really wanted was: <source lang=apl>
1 2⊃3 4⊃<<5 6
┌───┬───┬─────┐ │1 2│3 4│┌───┐│ │ │ ││5 6││ │ │ │└───┘│ └───┴───┴─────┘
</syntaxhighlight>
Link is different from Pair <source lang=apl inline>⍮</syntaxhighlight>, 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.