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] |
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を右側の引数とみなして、{(左波かっこ、左ブレイス、フロム)を作用させるという解釈です。