4,506
edits
(→Documentation: BQN link) |
m (Text replacement - "<source" to "<syntaxhighlight") |
||
Line 4: | Line 4: | ||
Use Drop to remove leading or trailing [[elements]] from a [[vector]]: | Use Drop to remove leading or trailing [[elements]] from a [[vector]]: | ||
< | <syntaxhighlight lang=apl> | ||
3 ↓ 5 4 3 2 1 | 3 ↓ 5 4 3 2 1 | ||
2 1 | 2 1 | ||
Line 12: | Line 12: | ||
Removing more elements than the length of the axis gives an [[empty]] result: | Removing more elements than the length of the axis gives an [[empty]] result: | ||
< | <syntaxhighlight lang=apl> | ||
¯8 ↓ 5 4 3 2 1 | ¯8 ↓ 5 4 3 2 1 | ||
Line 19: | Line 19: | ||
When the right argument is a multidimensional array, one element from the left argument is used for each axis. In a language that supports [[axis specification]] for Take, or allows a short left argument, you can specify drop amounts for only some axes: other axes will remain unchanged. | When the right argument is a multidimensional array, one element from the left argument is used for each axis. In a language that supports [[axis specification]] for Take, or allows a short left argument, you can specify drop amounts for only some axes: other axes will remain unchanged. | ||
< | <syntaxhighlight lang=apl> | ||
2 3 ↓ ⍳4 5 | 2 3 ↓ ⍳4 5 | ||
┌───┬───┐ | ┌───┬───┐ | ||
Line 32: | Line 32: | ||
The arguments to Drop must be valid arguments to [[Take]], and elements of the left argument are matched to [[axes]] of the right in the same way. Like Take, the left argument is subject to [[scalar rank extension]], and in some APLs the right is as well. | The arguments to Drop must be valid arguments to [[Take]], and elements of the left argument are matched to [[axes]] of the right in the same way. Like Take, the left argument is subject to [[scalar rank extension]], and in some APLs the right is as well. | ||
Each axis with a matching left argument element < | Each axis with a matching left argument element <syntaxhighlight lang=apl inline>d</source> is modified to remove <syntaxhighlight lang=apl inline>|d</source> indices, or all of them if <syntaxhighlight lang=apl inline>|d</source> is larger than the length of the axis. Indices are removed starting from the beginning if <syntaxhighlight lang=apl inline>d</source> is positive and starting from the end if it is negative (if <syntaxhighlight lang=apl inline>d</source> is 0, then no indices are removed). Equivalently, for an axis of length <syntaxhighlight lang=apl inline>l</source>, <syntaxhighlight lang=apl inline>l-l⌊|d</source> axes are retained—not dropped—from the axis starting from the opposite side: the end if <syntaxhighlight lang=apl inline>d</source> is positive and the beginning otherwise. If <syntaxhighlight lang=apl inline>|d</source> is greater than or equal to <syntaxhighlight lang=apl inline>l</source> for any axis, then the result is [[empty array|empty]] and shares a [[prototype]] with the argument. | ||
=== APL Model === | === APL Model === | ||
Drop can be modelled using Take with a complementary length: | Drop can be modelled using Take with a complementary length: | ||
< | <syntaxhighlight lang=apl> | ||
Drop ← { | Drop ← { | ||
s ← ⍴⍵ | s ← ⍴⍵ | ||
Line 45: | Line 45: | ||
} | } | ||
</source> | </source> | ||
The code works by modifying the left argument using the right argument's shape. First, the shape is used to restrict the left argument's range (< | The code works by modifying the left argument using the right argument's shape. First, the shape is used to restrict the left argument's range (<syntaxhighlight lang=apl inline>(-s)⌈s⌊⍺</source>) so that the maximum number of indices dropped is the length of the axis. Then, the shape is added or subtracted so that the left argument's sign is flipped. | ||
This implementation inherits all argument extensions from Take. The two middle lines are used to support right argument scalar rank extension and the [[SHARP APL]] short left argument extension. If Take does not have these extensions then they have no effect and can be removed. | This implementation inherits all argument extensions from Take. The two middle lines are used to support right argument scalar rank extension and the [[SHARP APL]] short left argument extension. If Take does not have these extensions then they have no effect and can be removed. | ||
Line 61: | Line 61: | ||
* [http://microapl.com/apl_help/ch_020_020_570.htm APLX] | * [http://microapl.com/apl_help/ch_020_020_570.htm APLX] | ||
* [https://www.jsoftware.com/help/dictionary/d531.htm J Dictionary], [https://code.jsoftware.com/wiki/Vocabulary/curlyrtdot#dyadic J NuVoc] (as < | * [https://www.jsoftware.com/help/dictionary/d531.htm J Dictionary], [https://code.jsoftware.com/wiki/Vocabulary/curlyrtdot#dyadic J NuVoc] (as <syntaxhighlight lang=apl inline>}.</source>) | ||
* [https://mlochbaum.github.io/BQN/doc/take.html BQN] | * [https://mlochbaum.github.io/BQN/doc/take.html BQN] | ||
{{APL built-ins}}[[Category:Primitive functions]] | {{APL built-ins}}[[Category:Primitive functions]] |