I've always liked this economy of assignment:
'e f g'=. s=. >1 2;3 4;5 6
f
3 4
e
1 2
-- but I wondered if it were possible to extend
this where the left hand side is not explicit:
abc=. 'a';'bb';'ccc'
┌─┬──┬───┐
│a│bb│ccc│
└─┴──┴───┘
I found I could make a single assignment:
(>1{abc)=. 1{s
bb
3 4
a
|value error: a
But I didn't want to put this into a loop.
It was neat to find that I could write:
(abc)=. s
a
1 2
bb
3 4
ccc
4 5
abc
┌─┬──┬───┐
│a│bb│ccc│
└─┴──┴───┘
This is useful in working with data files output
by a stellar evolution program where I have ASCII
tables with 90 columns and over 1000 rows, and each
column has a name 1 to 25 characters long: I wanted
to read this into a J session, assigning the column
values to each of the respective names. Turns out it
can be done with one line of the form
(head)=: data_array
where
head
┌────┬────┬──────┬────┬────┬──────────┬────────┬─────────────────────────┬───────────────────┬─
│zone│logT│logRho│logP│logR│luminosity│eps_grav│log_abs_eps_grav_dm_div_L│signed_log_eps_grav│..
└────┴────┴──────┴────┴────┴──────────┴────────┴─────────────────────────┴───────────────────┴─
(see http://www.astro.umd.edu/~jph/mesa_read.ijs)
Another example of the "black hole of J".
I don't know where in the documentation this can be
found - I just got there by experimentation.
Patrick
P.S. This started as a post asking for
help in getting rid of a loop, but
I found the solution along the way.
----------------------------------------------------------------------
For information about J forums see http://www.jsoftware.com/forums.htm