Thanks, Henry and Raul. I've seen this pattern in JfC and elsewhere, but apparently it's one I'm still working on fully assimilating.
The most important thing I'd missed was the effect of ~ such that each pass changes what index is used to draw from an unchanged reference vector. Careless. The other puzzling thing for me was the inclusion of the initial argument. It's very nice that it works that way, but I am again surprised that the first item resulting from the ^:a: pattern is the unprocessed argument. Maybe this time I'll remember. Or next time. ;) Anyway, now I fully understand the algorithm, and that's satisfying. T On Fri, May 8, 2009 at 8:55 PM, Henry Rich <[email protected]> wrote: > x {~^:a: y > > turns into > > ((y { x) { x) { x ... > > repeated until you get the same value fetched from x twice in a row. > The results of all the fetches are concatenated into a list. This is > the idiom to use for chasing a linked-list. > > Henry Rich > > Tracy Harms wrote: >> I'm having difficulty understanding the following verb: >> >> {~^:a:~ >> >> from the following bowling-score verb: >> >> framex =: 10 {. 0 {~^:a:~ _1 _1 ,~ �...@# >:@:+ 10&~: >> >> >> I understand several aspects of what it does. I know it's drawing the >> head element, I know it's doing this repeatedly until stable, and I >> know it's returning the accumulated result of all iterations. I know >> that it's qualifying 10s that have the right remainder-of-two to count >> as a strike in context. What I'm not comprehending is how it produces >> more than the first element of the right-hand argument. >> >> Thank you. >> ---------------------------------------------------------------------- >> For information about J forums see http://www.jsoftware.com/forums.htm >> > ---------------------------------------------------------------------- > For information about J forums see http://www.jsoftware.com/forums.htm > ---------------------------------------------------------------------- For information about J forums see http://www.jsoftware.com/forums.htm
