表の作り方


J言語で試行錯誤するとどんどん縦に長くなってしまいます。
一回で覚えればそれでもかまわないのですが、テキストにしてあとで思い出すのに使いたい場合、ボックスの表にしておくと便利です。
これもいろいろ試行錯誤しているのですが、例題を文字列にして、結果を".(クオートドット、ドゥー)で表示するといいと思う。
以下に例を示します。

   a=:'2 4$5 6 7 8 9'
   b=:'2 2$1'
   a; b
 +-------------+-----+
 |2 4$5 6 7 8 9|2 2$1|
 +-------------+-----+

   (a; b),:(".a) ; ".b
 +-------------+-----+
 |2 4$5 6 7 8 9|2 2$1|
 +-------------+-----+
 |5 6 7 8      |1 1  |
 |9 5 6 7      |1 1  |
 +-------------+-----+

3列以上になっても同じ感じで作れます。

   a=:'table'
   b=:'10*table'
   c=:'table+table'
   table=:2 3$5 6 7 8 9 10
   (a;b;c)
 +-----+--------+-----------+
 |table|10*table|table+table|
 +-----+--------+-----------+
   (".a);(".b);".c
 +------+---------+--------+
 |5 6  7|50 60  70|10 12 14|
 |8 9 10|80 90 100|16 18 20|
 +------+---------+--------+
   (a;b;c),:(".a);(".b);".c
 +------+---------+-----------+
 |table |10*table |table+table|
 +------+---------+-----------+
 |5 6  7|50 60  70|10 12 14   |
 |8 9 10|80 90 100|16 18 20   |
 +------+---------+-----------+

行が多い場合で行ずつ作って縦に足す例。

   a=:'';'Example';'Shape';'Rank'
   b=:'';'x';'$ x';'# $ x'
   c=:'scalar';6;'empty list';0
   d=:'List';(4 5 6);3;1
   e=:'Table';(i.2 3); 2 3; 2
   f=:'Report';(i.2 3 4);2 2 3; 3
   a,b,c,d,e,:f
 +------+-----------+----------+-----+
 |      |Example    |Shape     |Rank |
 +------+-----------+----------+-----+
 |      |x          |$ x       |# $ x|
 +------+-----------+----------+-----+
 |scalar|6          |empty list|0    |
 +------+-----------+----------+-----+
 |List  |4 5 6      |3         |1    |
 +------+-----------+----------+-----+
 |Table |0 1 2      |2 3       |2    |
 |      |3 4 5      |          |     |
 +------+-----------+----------+-----+
 |Report| 0  1  2  3|2 2 3     |3    |
 |      | 4  5  6  7|          |     |
 |      | 8  9 10 11|          |     |
 |      |           |          |     |
 |      |12 13 14 15|          |     |
 |      |16 17 18 19|          |     |
 |      |20 21 22 23|          |     |
 +------+-----------+----------+-----+

Learning Jを読んでいたら、次のような例が載っていました。

   p =: 4 1 $ 1 2 3 4
   q =: 4 1 $ 3 0 1 1
   2 3 $ ' p ' ; ' q ' ; ' p+q ' ;  p ; q ; p+q
 +---+---+-----+
 | p | q | p+q |
 +---+---+-----+
 |1  |3  |4    |
 |2  |0  |2    |
 |3  |1  |4    |
 |4  |1  |5    |
 +---+---+-----+

なるほど、と思わないでもないですが、わたし的には、次のように書いた方がわかりやすい。

   a=:' p ';' q ';' p+q '
   b=:p;q;p+q
   a,:b