配列の要素の取り出し


J言語では、配列を簡単に作れます。たとえば3行4列の配列が欲しいと思えば、次のようにします。

   ]x=:i.3 4
0 1  2  3
4 5  6  7
8 9 10 11

文字列との混在はできませんが、複素数でも無理数でも大丈夫です。

   ]x=:3 4$(^1), 3.2 , 2r3, (i.7) , o.1
2.71828 3.2 0.666667       0
      1   2        3       4
      5   6  3.14159 2.71828

上記の例では、有理数2r3は小数点表示になっています。同一テーブル内で表示の混在は許されないようです。
さて、配列の要素の取り出しで、xから3行目、3列目を取り出したい場合、x[2,2]とするとエラーになります。

   x[2,2]
syntax error
x [2,2]
J言語での要素の取り出しは{(左波かっこ、左ブレイス、フロム)ですが、これはアイテムの取出しですので、ただ数字をならべただけでは、その行を取り出すだけになってしまいます。
   2 2 { x
5 6 3.14159 2.71828
5 6 3.14159 2.71828
今回の目的のためには、ボックスの中にベクトルがなくてはいけないので、次のようなものを作り引数として与える必要があります。
   <(2 2)
 +---+
 |2 2|
 +---+
というわけで、次のようにするとx[i,j]で考えたことが実行できました。
   (<(2 2)) { x
3.14159
ただこれ(<(i j)) { xではx[i,j]と記述があまりに違いすぎてわかりにくいので、fromという動詞を作って引数i jを右に与えてよいようにしようと思います。つまりx from i jという感じです。なんとなくx[i, j]と似ているでしょう?
   from =: {~<
   x from 2 2
3.14159
ここで使った~(チルダ、なみなみ)は動詞の作用対象を変えるもので今回の場合はまず右側の数列を<(小なり記号、ボックス化)でボックス化し、それでもって左側の引数のxを右側の引数とみなして、{(左波かっこ、左ブレイス、フロム)を作用させるという解釈です。