Hi, Here is the definition http://help.dyalog.com/14.1/Content/Language/Primitive%20Operators/Rank.htm
Juergen Sauermann <juergen.sauerm...@t-online.de> writes: > Hi Louis, > > just for curiosity, where are negative ranks defined? > My version of "Mastering Dyalog APL" (ISBN : 978-0-9564638-0-7) does > not even mention the rank operator. > > /// Jürgen > > On 04/28/2016 12:31 AM, Louis de Forcrand wrote: > > > Whoops. Looks like I got here too late. > Well done! > > Louis > > On 28 Apr 2016, at 00:29, Louis de Forcrand <ol...@bluewin.ch> wrote: > > The three-item form is used if the associated function is ambivalent > (applied to the P-cells of ⍵ > if monadic, applied to corresponding Q-cells of ⍺ and R-cells of ⍵ if > dyadic). I don't believe it is > possible to define ambivalent functions in ISO APL however, so it is kind of > redundant. It is > probably left over from Sharp APL. > > As to the negative rank, I believe that it is an obvious flaw in the > standard. Being able to apply > a function to the items of the argument is incredibly useful. Of course this > is achievable like so: > {⍺ (f ⍤ (¯1+≢⍴⍺⍵)) ⍵} ⍝ without ⍺ for the monadic form > Now that I've checked, I'm pretty sure that GNU APL does support rank > (negative or not), but > not with all primitives. Try it out with ⊖ or +⌿ on a rank-3 or above array, > and then with > ]BOXING and ⊂ on the same array… looks like a bug to me. > > The rank operator isn't easy to grasp, and it's surely harder to implement. > > Good luck, > Louis > > On 27 Apr 2016, at 13:14, Jay Foad <jay.f...@gmail.com> wrote: > > Incidentally, it works like this in Dyalog and NARS2000 too, though > the Dyalog documentation doesn't mention the 3-item form. > > Jay. > > On 27 April 2016 at 09:02, Jay Foad <jay.f...@gmail.com> wrote: > > > Given g ← f⍤P Q R: > P is the monadic rank > Q is the left rank > R is the right rank > > So: > g Y applies g to the P-cells of Y > X g Y applies g to the Q-cells of X and the R-cells of Y > > The ⌽3⍴⌽y1 stuff is just a too-cute way of saying that you can specify > fewer than 3 values in the right operand, and: > R is shorthand for R R R > Q R is shorthand for R Q R > > > -- Br, /Alexey