プログラミング言語「APL」の入門 (Windowsでのフリー実行環境つき)
APL(A Programming Language)は,配列処理・ベクトル演算に秀でたプログラム言語。
とてもふしぎな記号(Unicode)でコーディングする。
発端はこれ:
未来の言語は「APL」? Rubyのまつもと氏が講演
http://www.atmarkit.co.jp/news/200902/13/matz.html
下記は,Windows環境インタプリタで,ちょっとAPLをさわってみるための入門+リンク集。
日本語の情報は極めて少ない。
プログラミング言語「APL」の概要
まずは,前述のまつもとゆきひろ氏の記事に加え,下記ページで基礎情報を仕入れておこう。
wikipedia: APL
http://ja.wikipedia.org/wiki/APL
プログラミング言語 APL
http://homepage3.nifty.com/ysaigusa/jp/apl/
市販インタプリタ紹介など
エーピーエル・コンサルタンツ
http://homepage3.nifty.com/apl/
↑今も現役で開発で使われているようだ…
上記のインタプリタ紹介を見ても,MSDOS上で動く商用のもの,などばかり。
なお,APLを少し改造したJ言語というものもある。
コード例参考:
APL/J言語:FizzBuzz完成品
http://d.hatena.ne.jp/niming538/20090313APL/Jでフラクタルを描く
http://d.hatena.ne.jp/Mozk/20090311/1236724665
APLの実行環境(インタプリタ)
Windows XPでフリーソフトとして動く実行環境がほしい。
↓ここにAPL Compilerが列挙されている。
http://www.thefreecountry.com/compilers/apl.shtml
Free APLは日本語OSでも何とか動く。
Free APL
http://www.pyr.fi/apl/downlo.htm
ここの
LATAA NYT FREEAPL ITSELLESI!!!(フィンランド語)
と書いてあるところからダウンロードして展開。
同梱のFREEAPL\RUN\INSTALL.txtに従えばインストールできる。
ただし,A:ドライブからファイルをコピーしようとしている個所があるので,そこは手動で行なう。
D:\temp\FREEAPL\RUN>copy a:\ws\*.* c:\freeapl\ws 指定されたドライブが見つかりません。
↑WS以下のファイルを自分でコピーすればよいだけだ。
FREEAPL.EXEを起動すると,GUIが立ち上がる。
使い方
Helpからヘルプを起動。
FreeAPL Font and keyboard という見出しのページから,ハイパーリンクで「Push Here to see the freeAPL Keyboard」をクリックすると,キーバインドの一覧表が出る。
このページは,印刷しておいた方が良いだろう。
通常のキーボードでUnicode文字を打鍵するために,一つのキーに4つの文字が割り当てられている。
上のレイアウト図で,たとえばAのキーで言うと
Shift+A CTRL+SHIFT+A A CTRL+A
のように対応する。
文字を打ち込むコツ:
- キーを押しても文字が出なかったら,連打すれば表示されることが多い。
- それで駄目でも,他のいろんなキーを押下した後なら表示できたりする。
操作:
- CTRL+INS コピー
- SHIFT+INS ペースト
さっそくコーディングしてみよう
文法は下記URLで学習できる。
APL言語教室
http://homepage3.nifty.com/ysaigusa/jp/apl/guide/index.html
ほんのさわりだけ実行してみる。
以下では,
- 非Unicodeによる仮の表記と,
- それをコンソール上で打ち込むための打鍵方法と,
- 実行時の返り値
を示す。
かけ算
式を打ち込んでリターンを押せば実行結果が返る。
3×8 ( 3 CTRL+SHIFT+X 8 ) -> 24
変数代入+画面表示
2+3の実行結果をAに代入し,さらにAを□に代入している。
□に代入された内容は,代入の副作用として画面に表示される。
□←A←2+3 ( CTRL+L CTRL+@ A CTRL+@ 2 + 3 ) -> 5
計算は常に右から行なわれる。
配列処理
ι(イオタ)で1から5までの配列ないしベクトルを作り,全項に100を足す。
100+ι5 ( 100 + CTRL+I 5 ) -> 101 102 103 104 105
ρ(ロー)で配列の大きさ(次元)を調べる。
ρA ( CTRL+R A) -> 5
行列処理
4行4列の行列を作る。
値は,先ほど作った配列Aを左上から繰り返すことによって埋める。
B←4 4ρA B -> 101 102 103 104 105 101 102 103 104 105 101 102 103 104 105 101
その結果をさらにいろいろなサイズの行列に整形してみる。中身の埋め方の規則は同じ。
3 3ρB -> 101 102 103 104 105 101 102 103 104 1 3ρB -> 101 102 103 3 1ρB -> 101 102 103
1行3列ならば最初の1は省略できる。
3ρB -> 101 102 103
要素抽出
[;]で行と列を指定し,行列の要素を表示できる。
B[1;] -> 101 102 103 104 B[1;2] -> 102
スペース区切りで複数指定すれば,そのまま複数の要素が抽出される。
A -> 101 102 103 104 105 A[3 4] -> 103 104
ソート
まず,ソートした結果の順位を表示させる。
この記号はSJISでは代用できる記号が無いので書かないでおく。
A -> 101 102 103 104 105 CTRL+SHIFT+3 A -> 5 4 3 2 1
これを利用すれば,ソートができる。
A[CTRL+SHIFT+3 A] -> 101 102 103 104 105
とりあえずここまで。
*1:残念ながら,ハット記号が足りないので動作しない。・・・