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

Reply via email to