APL (A Programming Language) 雑感


[Up Page]
学内のローカルニュースの記事に触発されて UNIX 用の free の APL 言語の インタープリター(APL\11)を入手しました.
# apl11.src.tar.Z というアーカイブになってました.

APL 言語の特徴を挙げると

というあたりでしょうか.あと,演算子がギリシャ語など特殊な文字(キ ャラクター)で定義されているというのもありますか.

グラフィックス機能と数式処理機能はありませんが,ベクトルや行列の演 算に関しては十分 Mathematica の代わりになると思います.また,バイ ナリのサイズが小さいので,FD ベースで動かすような小規模システムで も使えると言う利点があります.

APL\11 にはまだバグがいたりするようですが,解説書の例題を試す程度 では一度もバグに当たりませんでした.結構安定しているのではないかと 思います.UNIX のキャラクター端末で動くようになってますので,特殊 なフォントは必要ありませんが,演算子に ^H (back space キー)が使わ れていたりするので,端末設定をちゃんとやらないと使えない演算子がで てきます (^^;)

PC への移植の可能性ですが,ポインターと整数をごっちゃに使っている 部分があるようで,ポインタと整数のビット長の違う CPU への移植は面 倒だと思います.SunOS と NEWS-OS でコンパイルした場合は,ちょっと した修正だけで済みました.ただ,コンパイル時にポインター回りで warning が大量に出ます.SGI の IRIX 6.3 では動作しませんでした.

あと,何故か行列式を計算する演算子が APL にはなかったので練習がて ら作ってみましたので,それを付けておきます. APL の雰囲気だけです が,味わっていただけるのではないでしょうか :-)
# もっと良い作り方があると思いますが (^^;)
## 任意の大きさの行列の行列式が計算できます.

---
r{det m;i;e;a;b
}(2#RRm)/0,r{'array size error'
}(#/Rm)/0,r{'dimension error'
e{1YRm
a{eR0
}(1=e)/0,r{m[1;1]
i{1
loop: b{Ie
b[1,i]{ i,1
a[i]{det 1 1Um[;b]
}(e&i{i+1)/loop
r{+/m[1;]XaXeR1-`1U0,eR2
---
その後,改良版を作りました :-)
---
r{det m;i;e;a;b
}(2#RRm)/0,r{'array size error'
}(#/Rm)/0,r{'dimension error'
e{1YRm
a{eR0
}(1=e)/0,r{m[1;1]
i{1
b{Ie
loop: b[1,i]{ b[i,1]
a[i]{det 1 1Um[;b]
}(e&i{i+1)/loop
r{-/m[1;]Xa
---

naniwa@rbt.his.u-fukui.ac.jp