プログラミング言語J

昔のCマガジンに、プログラミング言語Jを用いると「1から10までの整数を、ランダムに100個生成して、その標準偏差を求める」プログラムは

0.5^~(+/%#)2^~(-(+/%#))1+?100$10

という1行だけで計算できることが誇らしげに書いてあった記事がありました。ループも変数も使っていないとのこと。J言語は「APLを拡張しつつもASCIIコードの範囲で使えるようにしたもの」と考えて良いのかな。

思い返せば、世の中のホビープログラマたちがBASICからC言語に移行する途中だった時期には、確かに「ループも変数もないのに計算ができる」ということが衝撃でした。

ところが、いま同じプログラムをR言語で書いてみると、

sd(sample(1:10, size=100, replace=TRUE))

となりました。ループも変数もないよね。sd (standard deviation)、sampling、size、replaceと英単語が多くて可読性も高い。

Matlabだと

std(randi(10, 100, 1))

とさらに短い。こちらもループも変数も使っていない。こっちもsd (standard deviation)、randi (random integer)ということがなんとなく分かる。

Jの方は標準偏差の定義通りきちんと計算をしているっぽい(平均と各データの差を二乗和してデータ数で割って平方とる)ので、RやMatlabのライブラリを使ったバージョンはずるいかもしれませんが・・・。