Eugene McDonnell explained the perm function --
http://www.jsoftware.com/jwiki/Doc/Articles/Play202

A.(spelled @: at the time) --
https://groups.google.com/group/comp.lang.apl/browse_thread/thread/f1efe8118e3f5ea9/612e1a61bb391ead?lnk=gst#612e1a61bb391ead




On Thu, May 23, 2013 at 5:11 AM, Raul Miller <[email protected]> wrote:

> On Thu, May 23, 2013 at 4:02 AM, Linda Alvord <[email protected]>
> wrote:
> >    perm=: 3 : 0
> >
> > z=. i.1 0
> >   for. i.y do. z=.,/(0,.1+z){"2 1\:"1=i.>:{:$z end.
> > )
> ...
> > How does this work?
>
> Yes, perm looks similar to the A. verb.
>
> The initial value of z is i.1 0 which I interpret as "1 example of a
> sequence of zero items".
>
> The {:$z in the loop gets that trailing 0 from the shape the first
> time through the loop, and it looks like that dimension grows by 1
> each time through the loop.  So i.>:{:$z is the number of elements
> treated the next time through the loop, and =i.>:{:$z is the
> corresponding identity (with this new number of rows and columns).
> \:"1=i.>:{:$z gives us index vectors which can be used to bring that
> diagonal element to the front of the list.  For example:
>
>    \:"1=i.3
> 0 1 2
> 1 0 2
> 2 0 1
>
> So if we have all permutations of two elements, and we stick a third
> element in front of each of them, and then use these indices to select
> from those "new value followed by all permutations" using {"1 2 we
> will get all permutations, one item longer than our previous list of
> permutations.  Except the way it actually works is slightly different:
>
> (0,.1+z) means we are sticking a 0 at the front and adjusting
> everything else to fit - this means that the permutations stay sorted
> from top to bottom.  (This is different from ({:$z),.z which would
> work but would also arrange things differently.)
>
> I imagine you understand why it's using ,/ before defining the new z?
>
> Thanks,
>
> --
> Raul
> ----------------------------------------------------------------------
> 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