スポンサーリンク

プログラミング言語「APL」の入門 (Windowsでのフリー実行環境つき)


APL(A Programming Language)は,配列処理・ベクトル演算に秀でたプログラム言語。

とてもふしぎな記号(Unicode)でコーディングする。


APLでのライフゲームのソースコード*1


発端はこれ:

未来の言語は「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/20090313

APL/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:残念ながら,ハット記号が足りないので動作しない。・・・