APL(エーピーエル)とは
APLは、1957年に
ケネス・アイバーソンによって創案された
プログラミング言語です。特徴的な記法を持ち、特に多次元
配列の処理に優れています。多くの処理系が対話型
インタプリタとして実装されています。
概要
APLは「APL記号」と呼ばれる特殊な記号を用いることで、計算式を非常に簡潔に記述できます。この記号は、キーボード入力の際にはシールや交換用キーキャップ、専用キーボードなどが用いられます。情報交換や内部表現には、かつては1バイト文字コードの切り替えが使われていましたが、現在はUnicodeに収録されています。初期の出力には専用のタイプボールが使用されていましたが、現在ではUnicodeフォントが使われることが一般的です。
APLはプログラムを簡潔に記述できる一方で、
可読性が低いという欠点があります。そのため、「書き込み専用プログラム」や「他人の書いたものを修正するくらいなら新たに書き起こした方が速い」と言われることもあります。
1957年に考案された記法は、1962年に書籍『A Programming Language』として発表され、1964年には
プログラミング言語処理系として実装されました。1966年にはIBM System/360上のOSで動作するAPL\360が発表され、
タイムシェアリングシステムでの対話型
インタプリタとして注目を集めました。しかし、FORTRANほどには普及しませんでした。
マイクロコンピュータ時代には、
CP/M|CP_M上で動作するAPL\80が登場し、一部の端末ではAPL記号を扱うことができました。1976年には
ビル・ゲイツがAPLの開発を試みましたが、完成には至りませんでした。日本では、日本IBMの販売のほか、アンペールからノート型APLマシンが発売されました。
APLを基に発展した言語として、J言語があります。J言語では、
ASCII文字のみで記述できるように変更されています。
演算機能
APLは、他の
プログラミング言語と比較して特徴的な演算機能を持ちます。特に、スカラ値だけでなく
配列も演算の対象とできる点や、高階関数に相当する機能を持つ点が特徴です。
関数と作用子
APLでは、前置演算子や中置演算子のように使われる記号列を「関数」、関数を操作する高階関数の意味を持つ記号列を「作用子」と呼びます。作用子は解析学における作用素に由来します。
右から左への結合
通常の算術式では、`3 + 2 - 1`は`((3 + 2) - 1)`のように左から右に評価されますが、APLでは`3 + (2 - 1)`のように右から左に評価されます。APLでは、この右から左への評価ルールしか存在しません。
例えば、`1 + 2 × 3 + 4`という式は、通常の算術式では`(1 + (2 × 3) + 4)`と評価されますが、APLでは`(1 + (2 × (3 + 4)))`と評価されます。
一項と二項
APLでは、同じ記号列(関数)を前置演算子(単項演算子)と中置演算子(二項演算子)の両方で使用し、それぞれ異なる意味を持ちます。例えば、`!`は前置演算子としては
階乗を表し、`!5`は`120`を返しますが、中置演算子としては組み合わせの数を表し、`2 ! 5`は`10`を返します。
優先順位がなく常に右結合であるため、文法の曖昧さはありません。
APLの特徴の一つとして、
配列同士の演算が可能な点が挙げられます。例えば、`1 2 3 + 4 5 6`は、各要素ごとに加算を行い、`5 7 9`という
配列を返します。
配列の長さが異なる場合はエラーが発生します。前置記法でも同様に、各要素に対する演算結果を
配列として返します。
作用子
内積と外積を例に作用子を紹介します。作用子は、関数を引数として取り、それによって定義される
内積や外積を計算する演算子を返します。
内積の作用子は`.`で表されます。例えば、`9 8 7 +.× 6 5 4`は、まず`9×6 8×5 7×4`を計算し、その結果を`9×6 + 8×5 + 7×4`のように加算して`122`を返します。右から左のルールが適用されることに注意が必要です。
外積の作用子は`∘.`で表されます。例えば、`1 2 3 ∘.× 4 5 6 7`は、各要素の組み合わせに対して乗算を行い、2次元の
配列を生成します。
関連項目
J (プログラミング言語)
A+
外部リンク
GNU APL
日本APL協会
日本語APL - MS-DOS用のAPLインタプリタ
APL Unicode Font – Extended - フリーのAPLフォント
*
NARS2000 - ISO/IEC 13751 Extended APLのオープンソースな実装