From: Difference between revisions

Jump to navigation Jump to search
2,368 bytes added ,  14:05, 13 May 2021
Include Dictionary, J, and BQN appearances
No edit summary
(Include Dictionary, J, and BQN appearances)
Line 1: Line 1:
{{Built-in|Select|}} ([[humour|jokingly]] referred to as ''Sane Indexing'') is a [[primitive function]] that allows selecting multiple [[major cell]]s using indices of the cells. It is equivalent to <source lang=apl inline>⌷⍨∘⊂⍨</source> and <source lang=apl inline>⌷⍤0 ∞</source>, only providing a neater notation for such a fundamental concept. It was introduced in [[Extended Dyalog APL]], and then adopted into [[dzaima/APL]] and [[KAP]].
{{Built-in|From|{}} or '''Select''' (<code>⊇</code>, or <code>⊏</code> in [[BQN]]) (sometimes [[humour]]ously called ''Sane Indexing'') is a [[primitive function]] that selects multiple [[major cell]]s of its right argument using an array of [[index|indices]] given by its left. The primitive often offers additional functionality for a [[nested]] left argument, which varies from one language to another. It appears in [[J]], [[Extended Dyalog APL]], [[dzaima/APL]], [[KAP]], and [[BQN]].


== Common usage ==
== Common usage ==
Line 8: Line 8:
fbdcea
fbdcea
</source>{{Works in|[[dzaima/APL]], [[Extended Dyalog APL]]}}
</source>{{Works in|[[dzaima/APL]], [[Extended Dyalog APL]]}}
Without Select, one would have to write <source lang=apl inline>Shuffle←⊢⌷⍨∘⊂?⍨∘≢</source>.
Without Select, one would have to write <source lang=apl inline>Shuffle←⊢⌷⍨∘⊂?⍨∘≢</source>. In this meaning, Select might be written as <source lang=apl inline>⌷⍨∘⊂⍨</source> or <source lang=apl inline>⌷⍤0 ∞</source> in [[Dyalog APL]].


In a case where the left argument is a permutation vector for the right argument, the functionality can rightfully be called ''Permute''.
In a case where the left argument is a permutation vector for the right argument, the functionality can rightfully be called ''Permute''.
Line 18: Line 18:
bdace
bdace
</source>{{Works in|[[dzaima/APL]], [[Extended Dyalog APL]]}}
</source>{{Works in|[[dzaima/APL]], [[Extended Dyalog APL]]}}
== Potential extension ==
 
Select can be defined as <source lang=apl inline>⌷⍨∘⊃⍨⍤0 ∞</source> thus allowing both the above usage and "scatter point indexing":<ref>[[Richard Park]]. [https://dyalog.tv/Webinar/?v=AgYDvSF2FfU Selecting from Arrays]. [[Dyalog Webinar]]. 16 Apr 2020. (Presented in the form <source lang=apl inline>((⊃⊣)⌷⊢)⍤0 99</source>.)</ref>
== Extensions ==
<source lang=apl>
=== Scatter-point ===
      1 4 3 ⊇ 4 4⍴⎕A
In [[A Dictionary of APL]] and [[J]], a boxed left argument indicates that each [[element]] will be used independently to select a [[cell]] of the argument. The behavior on a single element is very similar to APL's [[Index (function)|Index]] function. <source lang=j inline>{</source> has a left [[Function rank|rank]] of 0, so that results are [[mix]]ed together and those with different shapes may be padded with [[fill]]s.
<source lang=j>
  ]a =. 4 4$(a.i.'A')}.a.
ABCD
EFGH
IJKL
MNOP
  0 3 2 { a
ABCD
ABCD
MNOP
MNOP
IJKL
IJKL
      (1 1)(4 4)(3 4) ⊇ 4 4⍴⎕A
  (0 0;3 3;2 3) { a
APL
APL
</source>
</source>{{Works in|[[J]]}}
In APL this extension can be defined as <source lang=apl inline>⌷⍨∘⊃⍨⍤0 ∞</source> thus allowing both the above usage and "scatter point indexing":<ref>[[Richard Park]]. [https://dyalog.tv/Webinar/?v=AgYDvSF2FfU Selecting from Arrays]. [[Dyalog Webinar]]. 16 Apr 2020. (Presented in the form <source lang=apl inline>((⊃⊣)⌷⊢)⍤0 99</source>.)</ref>
 
== History ==
From (<code>{</code>) was introduced in 1986 by [[A Dictionary of APL]], with the same meaning now used in [[J]]. This description introduced the characteristic feature of selection of multiple cells simultaneously, as well as the pairing with monadic [[Catalogue]], scatter-point indexing, negative indices, and the ability to exclude rather than include indices using a third level of boxing. [[Roger Hui]] expressed his support for the new definition with a presentation at the next [[APL conference]]<ref>[[Roger Hui]]. [https://www.jsoftware.com/papers/from.htm Some Uses of { and }] at [[APL87]].</rev>, and it was included in J from the earliest drafts in 1990—a limited version had even appeared in [[Arthur Whitney]]'s one-page interpreter prototype.
 
The name Select and glyph <code>⊇</code> were introduced by [[Extended Dyalog APL]], and subsequently adopted by [[dzaima/APL]] and [[KAP]].
 
[[BQN]] uses the name Select like Extended Dyalog APL but takes the direction of the glyph <code>⊏</code>, as well as negative indexing, from J. For a nested left argument it uses a new extension: instead of viewing nesting as elaboration of each element of the left argument, it instead treats it as providing a list of left arguments to select from multiple axes of the right argument. This extension provides the functionality of APL's [[Index (function)|Index]] not by requiring the left argument as a whole to be enclosed but by requiring that each of its elements be an array.
 
== See also ==
== See also ==
* [[Index (function)]]
* [[Index (function)]]
* [[Bracket indexing]]
* [[Bracket indexing]]
* [[Pick]]
* [[Pick]]
== External links ==
=== Documentation ===
* J [https://www.jsoftware.com/help/dictionary/d520.htm Dictionary], [https://code.jsoftware.com/wiki/Vocabulary/curlylf#dyadic Nuvoc]
== References ==
== References ==
<references/>
<references/>
{{APL built-ins}}[[Category:Primitive functions]]
{{APL built-ins}}[[Category:Primitive functions]]

Navigation menu