APL/J言語:トランスポーズ

J言語では配列やテーブルを自由自在に扱えます。テーブルのたてよこを入れ替える動詞に|:(たてぼうコロン、パイプコロン、トランスポーズ)があります。

   (] ; |:) i.3 4
 +---------+------+
 |0 1  2  3|0 4  8|
 |4 5  6  7|1 5  9|
 |8 9 10 11|2 6 10|
 |         |3 7 11|
 +---------+------+

x |: yというように二項動詞としてつかうと、左側の引数で指定された軸が最後の軸になるように入れ替える。もしxがボックスの場合、ボックス内に指定された軸が同時に実行されてひとつの軸になる。
むむぅ、何を言っているのやら。例を見てわからないでもないけどわからない。

   y=: 3 4$'abcdefghijkl'
   y;(1 0|:y);(0|:y);((<0 1)|:y)
 +----+---+---+---+
 |abcd|aei|aei|afk|
 |efgh|bfj|bfj|   |
 |ijkl|cgk|cgk|   |
 |    |dhl|dhl|   |
 +----+---+---+---+

次の例もまだ考え中。

   y=: a.{~ (a. i. 'a') + i. 2 3 4
   z=: y;(2 1 |: y);((<2 1) |: y);(|: i. 4 5)
   z ,&< |:&.> z
 +------------------------+-------------------------+
 |+----+---+---+---------+|+--+--+--+--------------+|
 ||abcd|aei|afk|0 5 10 15|||am|am|am| 0  1  2  3  4||
 ||efgh|bfj|mrw|1 6 11 16|||eq|bn|fr| 5  6  7  8  9||
 ||ijkl|cgk|   |2 7 12 17|||iu|co|kw|10 11 12 13 14||
 ||    |dhl|   |3 8 13 18|||  |dp|  |15 16 17 18 19||
 ||mnop|   |   |4 9 14 19|||bn|  |  |              ||
 ||qrst|mqu|   |         |||fr|eq|  |              ||
 ||uvwx|nrv|   |         |||jv|fr|  |              ||
 ||    |osw|   |         |||  |gs|  |              ||
 ||    |ptx|   |         |||co|ht|  |              ||
 |+----+---+---+---------+||gs|  |  |              ||
 |                        ||kw|iu|  |              ||
 |                        ||  |jv|  |              ||
 |                        ||dp|kw|  |              ||
 |                        ||ht|lx|  |              ||
 |                        ||lx|  |  |              ||
 |                        |+--+--+--+--------------+|
 +------------------------+-------------------------+