2^.!21 is greater than 64 and 2^.!20 is less, so I'm guessing roll is not
implemented with arbitrary precision arithmetic.

Until that happens, you could implement your own roll verb using J
primitives that do utilise extended precision. Maybe someone has already
written one? Otherwise, you could use foreign (!:) to call a script, or a
dll to do the job. Nevertheless, I'm not sure if A. could handle such large
permutation indices either.

Alternatively, roll can be used to shuffle in other ways. Suppose you wish
to shuffle an array with n elements. Use ?n to choose the index of the
element that will occupy the first position. Then ?(n-1) provides the index
of the second, ?(n-2) the third, and so on. Much more efficient —if less
elegant— than ?!. And it works for very large n.
On 11 Jan 2016 9:22 pm, "Eddie Bracho" <[email protected]> wrote:

>
>     (? ! 21)
>
> |domain error
>
> | ( ?!21)
>
>
>
> Is this intended behavior? I'm trying to shuffle an array by providing a
> random permutation to Anagram (A.), but this limitation does not allow me
> to shuffle arrays with more than 20 elements.
>
> ----------------------------------------------------------------------
> For information about J forums see http://www.jsoftware.com/forums.htm
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to