I have a simple verb that returns a list of randomised numbers

stargen=: monad define
'maxx maxy'=.y
(?2),(?maxx),(?maxy), 1
)

For the life of me I have failed to just call it and create a table of the
results.

Initially I tried 100 $ stargen 1024;768 but that just calls it once and
cycle repeats the same value one hundred times, close but no tobacco
related products in sight.

Then I ended up with this version

   sg =: 3 : '(?2),(?100),(?100)'
   sg2 =: 3 : '(?3),(?0{::y),(?1{::y),1'

and the nearest I got to what I need is this:

   > (sg) each i. 10
0 53 53
0 52 25
0 38 96
1 92 75
0 31 47
1 87 65
1 74 11
0 30 75
0  4 51
1 64 99

but when I use the version that takes 1024;768 as the y value (sg2) I get a
domain error,

   > (sg2 1024;768) each i. 10
|domain error
|   >(sg2 1024;768)    each i.10

each is defined as &.> which as I understand it (probably wrong) first
unboxes the list of integers 0..9 which wasn't even boxed in the first
place (but I am stuck, after all), after the unboxing it then does the &.
(under) which applies ....why am I tell you this, you know this.

Eventually I considered making my verb (stargen) a dyad and tackling it
this way, which works:

   sg3
4 : '(?3),(?0{::x),(?1{::x),1'

and running it like this:

  > (1024;768)&sg3 each i. 10
2 1013 257 1
0  251 127 1
2  957 732 1
0  508 263 1
2  358 340 1
2 1012 731 1
0   82 436 1
1  228  57 1
1  990 759 1
1  102   4 1

I just wanted a table of N rows of stargen output, passing in the current
window dimensions. Fail! :D
Looking for a better / neater / more J like way of doing this so I can
learn for future sessions.

Thanks
Sean
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm

Reply via email to