J FAQ

NOVICE

ベクトルを入力する方法は スペースで区切る(半角)
a=. 2 3 4

ベクトルとベクトルの加算
a+ 1 2 3
3 5 7
マトリクスの作成方法は 次の方法が簡潔。最後のリストは(,:)で区切る。 数字と数字の間にはスペースを
b=. 1 2 3,4 5 6,:7 8 9

1 2 3
4 5 6
7 8 9

ベクトルとマトリクスはサイズ(この場合は横)が同じなら演算できる
a+b
3 4 5
7 8 9
11 12 13
リストを#のcopyで作るのは手間だ 10$2 4
2 4 2 4 2 4 2 4 2 4
コピーする総個数はアイテム数
abc と関数名のみをijxで打つと定義内容が表示されるが。
abc '' はなにか
abc ''は引数がヌル(空)。 ''はヌル(空)のベクトル。
引数がヌルのスクリプトもあり、こうして起動する
plotのドキュメントがHTMLに変ったが所在が不明 http://www.jsoftware.com の
wiki showcase guides frameworks plotに入っている
文字を用いたいが型の指定方法がわからない 型の指定は不要で、変数に最初から数値、文字列の型や区別はない(出来ない)

文字列はシングルクオートで囲む
a=. 'asakusa ueno kanda'

漢字も利用できるがJのijxで入力できないときはエディタから 張り付ければよい。
ユニコードの多ビット文字はコメント、見出し、データに使える
漢字変数を使いたい私も使いたいので使える言語を 教えてください(なでしこがある)
Jはキーボード記号を自由に各国の言語で再定義することができる。( 漢字ではないが)定義ファイルを作成し、最初にロードすると 関数名やプリミティブは好きなように名が付けられる。

tasu=: +
waru=: %
bibun=. d.

コメントに変数名を漢字で書いておくと幾分読みやすくなるかも
単位行列の生成法は 次が簡潔
=&i.3

1 0 0
0 1 0
0 0 1
ランクとは 配列を扱うので計算方向を示す必要がある場合が多くある。

a=. i. 3 4
0 1 2 3
4 5 6 7
8 9 10 11

2次元配列なのでランク0はスカラ方向(デフォルトなので指定不要)の縦に
+/ a
12 15 18 21

ランク("1)と明示するとベクトル方向の横に作用する
+/"1 a
6 22 38

ADVANCED

関数名が被った場合はどうなるか 警告無しに後者優先となる。衝突を回避するにはロケールを用いる
ファイルの前の方にcoclassを指定して用いる。
coclass 'tokyo' NB. tokyo.ijs
coclass 'osaka' NB. osaka.ijs
abc_tokyo_
def_osaka_
関数を引数にして外付けする方法は 副詞(1 : 0)や接続詞(2 : 0)でスクリプトを作成する。 関数(動詞)はu,vで引用する。副詞は動詞を修飾し接続詞は 動詞と名詞を繋ぐ。副詞型は左から動詞をuで引用するがuの記述のない 状態では(1:0)は動かないのでエラーとよく誤認する
Tacit型では自由に引用できる。
IJXで実行中に無限ループに入った時に抜け出す方法 jbreak.batをデスクトップにコピーしておき、何回かクリックすると 大体はブレークできる
CやJAVAの様にcodeを{}でブロック化出来ないか JやAPLは独立したプログラムを作成して簡単に組み込める。引数は 任意
aa=: 4 : 0
tmp=. x aa_sub y
)
aa_sub=: 4 : 0
(x + y);(x - y)
)

APLやJは当初から(まだオブジェクト化という言葉がなかった頃) オブジェクト構造を採用している。各オブジェクトは名前や コメント(NB.)で分かりやすくする
取る原始関数({ {. {:)は多いが落とすものがない drop_item=: 4 : '( x ~: i. # y) # y' NB. 1 drop_item i.4
JのコンパイラはないかAPLはマイクロソフトのドットネット 対応のモノがある。Jもドットネットに組み込む方法はある。
配列計算言語はプログラム作成過程で色々思考する事が多く 殆どがインタプリッタである。デバッグも殆ど不要でプログラム 作成時間はコンパイラの十分の一程度。配列計算言語のコンパイラ はFortran95がある
Jで試作しアルゴリズムを確立してからコンパイラに落とし込むことも 良く行われている
Jは何次の配列まで演算可能か 4次までしか用いたことがないので良くは知らない。次を試して欲しい
<"4] 2 2 2 2 3 2$ i.100

REMINISCE

Jと言う名の由来はRoger Hui K.E.Iverson の HIJK らしい。
野球の大リーグ優勝ををカナダに初めてもたらした トロント ブルージェイズのJだと信じている人もいる
Jの計算精度は K.E.Iversonの思想で数学と関係ない型や桁数指定は APLの最初から入っていないしJにもなく自動で倍精度になっている。
最近の数値計算言語は 浮動小数点を用いないで有理数/分数で演算する方が多い。
明示する場合はマセマティカと同様 123xのように入力するとメモリのある 限り多倍長演算を行う(1個の数でよい)
+ +. +: に馴染めない K.I.Iverson達がキーボード記号が足りないため使い回ししたもの。 再定義したファイルを最初に読み込めば任意の文字でプリミティブが 利用できる。
しかし、トロントのフォーラムに巣くっている人たちは キーボード記号主義者だ
K.E.IversonはJで何がやりたかったのか K.E.Iversonは数学とコンピュータの関係を深く考えた。当然 マセマティカもFortran95もない真空管の時代である。
APLが一つの答えであったが満足できなかったようだ
まだWINDOWS Ver3が出始める前でAPL文字の通信と印刷が不自由であった。 そこでキーボード記号でさくさく動くAPLをベースとした簡潔な言語を開発した。
K.E.IversonはJにより数学に近い記述法としてのタシット定義と 微分関数定義(d.)をいれた。
微分関係の発展は後継に託されている