APL
出典: フリー百科事典『ウィキペディア(Wikipedia)』
APL(エーピーエル)は、コンピューターのプログラミング言語の一種で、1957年のケネス・アイバーソンによる創案に基づいた独特の表記法を用いた、対話型インタープリター言語である。とくに配列処理に優れる。「APL」とは、『Aプログラミング言語』(A Programming Language)の略であるが、言語の特性から時に『配列処理言語』(Array Processing Language)と言い換えられる。
目次 |
[編集] 概要
APLは他の多くのプログラミング言語と異なり、「APL記号」と呼ばれる特殊な数式記号を用いるが、これにより計算式をきわめて単純に記述できる。この記号はしばしば、特殊キーボードで入力される。APL記号を表示するためのフォントを「APLフォント」と呼ぶが、これが用意されていないコンピューターでは代替として、例えば「∑」(合算)を「[SIGMA]」と表示する。
APLではプログラムを非常に簡潔に記述できるが、その反面、可読性に乏しく、習熟者の間では「他人の書いたものを修正するくらいであれば、新たに書き起こす方が速い」とも揶揄される。
APLは、初期にはパンチカードによりプログラムを入力していたが、後に対話型インタプリターが発表されたことで注目を集めた。しかしながら、FORTRANほどに普及する事はなかった。
1957年に創案された記法は、1962年にアイバーソン博士の著書『Aプログラミング言語』(A Programming Language)として発表されたが、この一部が1964年にプログラミング言語として実装された。
1966年にIBM System/360のための「APL/360」が発表される。一方でAPLをCP/M(CP/M80)上に構築したものが「APL\80」であり、端末によってはAPL記号を扱う事が可能であった。
APLをASCIIコードだけで表記すべく仕立て直したものとして「J」と呼ばれる処理系が知られている。
現在では、全てのAPL記号は、万能文字コードとして知られる「UNICODE」の中に規定されている。
|
[編集] 演算機能
APL は他のプログラミング言語と比べると特徴的な演算機能を持つ、特に配列演算の機能を最初から実装しているところは大きな特徴である。ここでは APL の基本的な演算機能について述べる。
[編集] 前置記法と中置記法
APLは演算子を前置記法と中置記法として使用する場合では意味が変わる。これは他の言語でも見られる特徴ではある、例えばC言語では "*"(アスタリスク)は中置記法で用いるとかけ算だが、前置記法で用いるとポインタの参照先の値を返すなどがある。 しかし APLでは意識してこれらの違いを取り入れている。例えば演算子 ! は前置記法
! 5
と書くと階乗を表す、この場合は120を返す。しかし中置記法として使用すると組み合わせを返す。
2 ! 5
とした場合、2C5 = 10で10を返す。この演算子以外でも二つの意味を持つ演算子が APL には多数実装されている。この機能のため APL の演算子は優先順序が存在せず、常に右の方が優先される。例えば
はであって、 ではない。右の演算子が優先されることは通常の数式と逆なので特に注意が必要である。
[編集] 配列演算
APL の特徴の一つに配列演算、すなわち配列同士の演算が可能なことが挙げられる。例として
1 2 3 + 4 5 6
という表記を行うと、それぞれの要素毎に加算を行い 5 7 9 という配列を返す。この場合二つの配列は同じ長さでないとエラーを返す。前置記法で使用した場合でも同じく各要素毎の演算結果を返す。
! 2 3 4
なら各要素の階乗を要素とする配列を返す、この場合は 2 6 24 となる。
[編集] 内積と外積
APL には内積と外積という演算子を支援する機能がある。この機能は数学の内積と外積を意識した機能ではあるが、違う物なので注意が必要である。内積は
(演算子1) . (演算子2)
という形で表記することによって二つの演算子を合成する機能である。これは例えば
9 8 7 -.+ 6 5 4
とした場合、まず後の演算子(この場合は + )が各要素毎に適用され、その結果を前の演算子(ここでは - )を要素間に適用した値を返す。この場合は (9+6)-(8+5)-(7+4) である、さらに APL は右の演算子が優先されるので (9+6)-((8+5)-(7+4)) となり結局 13 が返される。
外積は被演算子を回転させて計算する機能である、この機能は
(演算子)
という形で表記する、例として
1 2 3 4 5 6 7
という式があった場合、これは
× | 4 | 5 | 6 | 7 |
---|---|---|---|---|
1 | 1 × 4 | 1 × 5 | 1 × 6 | 1 × 7 |
2 | 2 × 4 | 2 × 5 | 2 × 6 | 2 × 7 |
3 | 3 × 4 | 3 × 5 | 3 × 6 | 3 × 7 |
という計算が行われ
4 5 6 7 8 10 12 14 12 15 18 21
という2次元の配列を返す。