4,577
edits
m (Text replacement - "<source" to "<syntaxhighlight") |
m (Text replacement - "</source>" to "</syntaxhighlight>") Tags: Mobile edit Mobile web edit |
||
Line 1: | Line 1: | ||
{{Built-in|Each|¨}} is a [[primitive operator|primitive]] [[monadic operator]] which applies its [[operand]] to each [[element]] of the [[argument]]s, and returns an array whose elements are the results. If two arguments are given, their elements are matched using [[conformability]] rules. | {{Built-in|Each|¨}} is a [[primitive operator|primitive]] [[monadic operator]] which applies its [[operand]] to each [[element]] of the [[argument]]s, and returns an array whose elements are the results. If two arguments are given, their elements are matched using [[conformability]] rules. | ||
== Definition == | == Definition == | ||
Each is defined only in [[Nested array model|nested]] APLs. Some [[Flat array model|flat]] APLs obtain analogous functionality by using an [[Under]] operator with [[close composition]] along with the [[Function rank|rank]]-0 function [[Disclose]] (or Unbox). In [[SHARP APL]] this is written <syntaxhighlight lang=apl inline>f¨></ | Each is defined only in [[Nested array model|nested]] APLs. Some [[Flat array model|flat]] APLs obtain analogous functionality by using an [[Under]] operator with [[close composition]] along with the [[Function rank|rank]]-0 function [[Disclose]] (or Unbox). In [[SHARP APL]] this is written <syntaxhighlight lang=apl inline>f¨></syntaxhighlight>. In [[J]] it is <syntaxhighlight lang=j inline>f&.></syntaxhighlight>. | ||
Each differs from the [[Rank operator]] with rank 0 in that the operand arguments and results are not [[enclose]]d. As the [[elements]] of a nested array they need not be [[scalar]]. <syntaxhighlight lang=apl inline>f¨</ | Each differs from the [[Rank operator]] with rank 0 in that the operand arguments and results are not [[enclose]]d. As the [[elements]] of a nested array they need not be [[scalar]]. <syntaxhighlight lang=apl inline>f¨</syntaxhighlight> can therefore be defined as <syntaxhighlight lang=apl inline>⊂⍤f⍥⊃⍤0</syntaxhighlight>. | ||
The Each operator has no effect on [[scalar function]]s, since these functions already map over each array element. For example, both expressions below have the same meaning, since <syntaxhighlight lang=apl inline>+</ | The Each operator has no effect on [[scalar function]]s, since these functions already map over each array element. For example, both expressions below have the same meaning, since <syntaxhighlight lang=apl inline>+</syntaxhighlight> is a scalar function. | ||
<syntaxhighlight lang=apl> | <syntaxhighlight lang=apl> | ||
1 + 1 2 3 4 | 1 + 1 2 3 4 | ||
Line 11: | Line 11: | ||
1 +¨ 1 2 3 4 | 1 +¨ 1 2 3 4 | ||
2 3 4 5 | 2 3 4 5 | ||
</ | </syntaxhighlight> | ||
== Examples == | == Examples == | ||
Line 31: | Line 31: | ||
│cba│fed│ihg│ | │cba│fed│ihg│ | ||
└───┴───┴───┘ | └───┴───┴───┘ | ||
</ | </syntaxhighlight> | ||
=== Mapping === | === Mapping === | ||
Line 44: | Line 44: | ||
│10 1 2 3│20 1 2 3│30 1 2 3│ | │10 1 2 3│20 1 2 3│30 1 2 3│ | ||
└────────┴────────┴────────┘ | └────────┴────────┴────────┘ | ||
</ | </syntaxhighlight> | ||
The other method is by [[bind]]ing the argument that is to be used as a whole to the function, deriving a monadic function, which is then applied using Each: | The other method is by [[bind]]ing the argument that is to be used as a whole to the function, deriving a monadic function, which is then applied using Each: | ||
<syntaxhighlight lang=apl> | <syntaxhighlight lang=apl> | ||
Line 55: | Line 55: | ||
│10 1 2 3│20 1 2 3│30 1 2 3│ | │10 1 2 3│20 1 2 3│30 1 2 3│ | ||
└────────┴────────┴────────┘ | └────────┴────────┴────────┘ | ||
</ | </syntaxhighlight> | ||
Note how binding a right argument derives a monadic function which still takes its single argument on the right. | Note how binding a right argument derives a monadic function which still takes its single argument on the right. | ||
=== Selecting === | === Selecting === | ||
An enclosed array is a [[scalar]], which is subject to [[scalar extension]]. This can be used to simulate [[Outer Product|outer product]] by a one-sided Each (pair the entire right argument with each element of the left argument, or vice versa). An application of this behavior is the "chipmunk idiom" <syntaxhighlight lang=apl inline>X⊃¨⊂Y</ | An enclosed array is a [[scalar]], which is subject to [[scalar extension]]. This can be used to simulate [[Outer Product|outer product]] by a one-sided Each (pair the entire right argument with each element of the left argument, or vice versa). An 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: | ||
<syntaxhighlight lang=apl> | <syntaxhighlight lang=apl> | ||
Line 67: | Line 67: | ||
│3 4│1 2│ | │3 4│1 2│ | ||
└───┴───┘ | └───┴───┘ | ||
</ | </syntaxhighlight> | ||
== External links == | == External links == |