Enclose: Difference between revisions

Jump to navigation Jump to search
602 bytes added ,  22:17, 10 September 2022
m
Text replacement - "</source>" to "</syntaxhighlight>"
m (Text replacement - "http://help.dyalog.com" to "https://help.dyalog.com")
m (Text replacement - "</source>" to "</syntaxhighlight>")
 
(5 intermediate revisions by 2 users not shown)
Line 3: Line 3:
== Examples ==
== Examples ==


An enclosed array is a [[scalar]], which is subject to [[scalar extension]]. This can be used to simulate [[Outer Product|outer product]] by a [[scalar function]] or one-sided [[Each]] (pair the entire right argument with each element of the left argument, or vice versa). A notable application of this behavior is the "chipmunk idiom" <source lang=apl inline>X⊃¨⊂Y</source>, which simulates <source lang=apl inline>Y[X]</source> for (possibly nested) [[vector]] Y and simple X.
An enclosed array is a [[scalar]], which is subject to [[scalar extension]]. This can be used to simulate [[Outer Product|outer product]] by a [[scalar function]] or one-sided [[Each]] (pair the entire right argument with each element of the left argument, or vice versa). A notable application of this behavior is the "chipmunk idiom" <syntaxhighlight lang=apl inline>X⊃¨⊂Y</syntaxhighlight>, which simulates <syntaxhighlight lang=apl inline>Y[X]</syntaxhighlight> for (possibly nested) [[vector]] Y and [[simple]] X.


<source lang=apl>
<syntaxhighlight lang=apl>
       1 2 3+⊂4 5 6  ⍝ Computes (1+4 5 6)(2+4 5 6)(3+4 5 6)
       1 2 3+⊂4 5 6  ⍝ Computes (1+4 5 6)(2+4 5 6)(3+4 5 6)
┌─────┬─────┬─────┐
┌─────┬─────┬─────┐
Line 20: Line 20:
│3 4│1 2│
│3 4│1 2│
└───┴───┘
└───┴───┘
</source>
</syntaxhighlight>


Enclose with function axis can be used to move one or more axes to an extra level of nesting.
Enclose with function axis can be used to move one or more axes to an extra level of nesting.


<source lang=apl>
<syntaxhighlight lang=apl>
       ⎕←M←2 3 4⍴⎕A
       ⎕←M←2 3 4⍴⎕A
ABCD
ABCD
Line 51: Line 51:
       ⍴⊃⊂[1 3]N  ⍝ Shape of each element is the enclosed axes
       ⍴⊃⊂[1 3]N  ⍝ Shape of each element is the enclosed axes
2 4
2 4
</source>{{Works in|[[Dyalog APL]]}}
</syntaxhighlight>{{Works in|[[Dyalog APL]]}}


== Description ==
== Description ==


Some implementations allow a [[simple]] [[scalar]] to be [[box]]ed, while the others do not.
With no [[function axis]], Enclose returns a [[scalar]] array whose only [[element]] is the argument. In the [[flat array model]] this means that the argument is placed in a [[box]], and the result is this box as a scalar. In the [[nested array model]] it can simply be viewed as creating a new array. However, if the argument is a [[simple scalar]], then the result will match the argument because nested array theory dicatates that simple scalars [[float]].


Enclose (without axis) is the [[inverse]] of [[Mix]] and [[First]] in the sense that the latter two undo the additional nesting introduced by Enclose.
== Properties ==
 
Enclose (without axis) is the [[inverse]] of both [[Mix]] and [[First]] in the sense that either of these undoes the additional nesting introduced by Enclose.


== External links ==
== External links ==
Line 65: Line 67:
* [https://help.dyalog.com/latest/#Language/Primitive%20Functions/Enclose.htm Dyalog], [https://help.dyalog.com/latest/#Language/Primitive%20Functions/Enclose%20with%20Axes.htm with axes]
* [https://help.dyalog.com/latest/#Language/Primitive%20Functions/Enclose.htm Dyalog], [https://help.dyalog.com/latest/#Language/Primitive%20Functions/Enclose%20with%20Axes.htm with axes]
* [http://microapl.com/apl_help/ch_020_020_580.htm APLX]
* [http://microapl.com/apl_help/ch_020_020_580.htm APLX]
* J [https://www.jsoftware.com/help/dictionary/d010.htm Vocabulary], [https://code.jsoftware.com/wiki/Vocabulary/lt NuVoc]
* J [https://www.jsoftware.com/help/dictionary/d010.htm Vocabulary], [https://code.jsoftware.com/wiki/Vocabulary/lt NuVoc] (as <syntaxhighlight lang=j inline><</syntaxhighlight>)
* [https://mlochbaum.github.io/BQN/doc/enclose.html BQN] (as <code><</code>)


{{APL built-ins}}[[Category:Primitive functions]]
{{APL built-ins}}[[Category:Primitive functions]]

Navigation menu