Although, funnily enough if we define nPr =: [:*/-i. then it works 14 nPr 1.9 1 14 182 2184 24024 240240 2162160 17297280 121080960
I'm beginning to understand the issue with the rank, although it seems to me that "*/@(-i.)" and "[:*/-i." are not a million miles from each other, so I can't quite see _which_ is the verb that allows the one to work, but not the other. Can anyone point me to the best introduction to read about verb rank? (BTW, I do understand that if we want the whole sequence */\ 14 - i. 8 is the better way, since it will avoid redundant recomputation.) On Fri, 2010-02-19 at 13:12 +0100, Zsbán Ambrus wrote: > The way we defined that verb, it won't automatically work for an array > of numbers. J builtins that do numerical computations on single > numbers are defined to be extended to arrays. For example, ^!._1 is > such a builtin, so we get > > 14 ^!._1 i. 9 > 1 14 182 2184 24024 240240 2162160 17297280 121080960 > > Other builtins and user functions do use array arguments as a whole, > so J won't automatically apply our defined verbs to each element, > which is why the above doesn't work. You can use the rank conjuction > to apply them to each element and assemble the results. > > 14 */@(-i.)"0 i. 9 > 1 14 182 2184 24024 240240 2162160 17297280 121080960 > > Although if you need the whole sequence, it might be better to compute > it like this, > > 1, */\ 14 - i. 8 > 1 14 182 2184 24024 240240 2162160 17297280 121080960 > > Ambrus ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
