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

Reply via email to