| パラダイム | 配列、機能的、構造化、モジュール式 |
|---|---|
| デザイン: | ケネス・E・アイバーソン |
| 開発者 | ラリー・ブリード、ディック・ラスウェル、ロジャー・ムーア、他 |
| 初登場 | 1966年11月27日[1] |
| 安定リリース | ISO/IEC 13751:2001 / 2001年2月1日 |
| タイピングの規律 | 動的 |
| プラットフォーム | クロスプラットフォーム |
| ライセンス | 独自、オープンソース |
| Webサイト | aplwiki.com より |
| 主な実装 | |
| |
| 影響を受けた | |
| 数学表記 | |
| 影響を受けた | |
APL ( 『プログラミング言語』という本にちなんで名付けられた)[3]は、1960年代にケネス・E・アイバーソンによって開発されたプログラミング言語です。その中心的なデータ型は多次元配列です。APLでは、ほとんどの関数と演算子を表すためにさまざまな特殊なグラフィックシンボル[4]を使用しており、非常に簡潔なコードになっています。APLは、コンセプトモデリング、スプレッドシート、関数型プログラミング[5]、コンピュータ数学パッケージ[6]の開発に大きな影響を与えてきました。また、他のいくつかのプログラミング言語にも影響を与えています。[7] [8]
歴史
数学表記
配列を操作するための数学的表記法は、 1957年にハーバード大学でケネス・E・アイバーソンによって開発されました。1960年に彼はIBMで働き始め、そこでアディン・ファルコフと共にこの表記法を開発し、 1962年に著書「プログラミング言語」で出版しました。[3]序文にはその前提が述べられています。
応用数学は、さまざまな関数の正確な値または近似値を計算するための明示的な手順の設計と分析に大きく関係しています。このような明示的な手順は、アルゴリズムまたはプログラムと呼ばれます。プログラムを記述するための効果的な表記法は、かなりの構文構造を示すため、プログラミング言語と呼ばれます。
この表記法は、 IBM が将来のコンピュータ向けにスタック マシンとレジスタ マシンを比較評価していたときに、 Burroughs B5000とそのスタック メカニズムなどのコンピュータ システムに関する短い研究レポートに IBM 社内で使用されていました。
アイバーソンはまた、 1963年に出版されたフレッド・ブルックスと共著した『自動データ処理』の「プログラミング言語」の章の草稿でもこの記法を使用した。[9] [10]
1979年、アイバーソンはAPLに関する研究でチューリング賞を受賞した。 [11]
コンピュータプログラミング言語への発展
1962 年という早い時期に、Falkoff が William C. Carter と、後にIBM System/360ファミリーとなるマシンの命令セットを標準化する作業について話し合った後に、この表記法を使用して完全なコンピュータ システムを記述する最初の試みが行われました。
1963年、IBMシステム研究所に勤務していたハーバート・ヘラーマンは、IBM 1620コンピュータにこの表記法の一部を実装し、これは超越関数を級数和で計算する高校の特別コースで生徒たちに使用されました。生徒たちはヘラーマンの研究室でコードをテストしました。この表記法の一部の実装は、Personalized Array Translator (PAT)と呼ばれました。[12]
1963年、IBMに勤務していたファルコフ、アイバーソン、エドワード・H・サッセンガス・ジュニアは、IBM System/360シリーズのマシンのアーキテクチャと機能を正式に記述するためにこの表記法を使用し、その結果は1964年にIBM Systems Journalに論文として発表された。この論文が発表された後、チームはコンピュータシステム上での表記法の実装に注意を向けた。実装に焦点を合わせた動機の1つは、1964年にIBMが買収した教育会社であるサイエンス・リサーチ・アソシエイツで新しい職務に就いたジョン・L・ローレンスの関心であった。ローレンスはアイバーソンと彼のグループに、教育におけるコンピュータの開発と使用のツールとしてこの言語を使用するのを手伝ってくれるよう依頼した。[13]
スタンフォード大学のローレンス・M・ブリードとフィリップ・S・エイブラムスがIBMリサーチのチームに加わった後、彼らはIBSYSオペレーティングシステムで動作するIBM 7090コンピュータ用に行われた表記法の一部をFORTRAN IVでプログラムした実装に関する以前の作業を継続しました。この作業は1965年後半に完了し、後にIVSYS(アイバーソンシステム)と名付けられました。この実装の基礎は、1966年にエイブラムスによってスタンフォード大学の技術レポート「アイバーソン表記法のインタープリター」で詳細に説明されました。この学術的側面は、ニクラウス・ヴィルトによって正式に監督されました。[14]以前のヘラーマンのPATシステムと同様に、この実装ではAPL文字セットが省略されましたが、関数と演算子には特別な英語の予約語が使用されました。このシステムは後にタイムシェアリングシステムに適合され、1966年11月までにタイムシェアリングモードで動作するIBM System/360 Model 50コンピュータ用に再プログラムされ、IBM社内で使用されました。 [15]
ハードウェア


ブラウン管(CRT) 端末が広く使用されるようになる前に APL を効果的に使用する能力において重要な進歩は、すべての特別な APL 文字を備えた特別なIBM Selectric タイプライターの交換可能なタイピング要素の開発でした。これは、 IBM 1050やIBM 2741端末などの Selectric タイプライターとタイピング要素のメカニズムを使用する紙印刷端末ワークステーションで使用されました。キーキャップを通常のキーの上に配置して、そのキーが押されたときにどの APL 文字が入力され、タイプされるかを示すことができました。初めて、プログラマーは Iverson の表記法で使用されている適切な APL 文字を入力して確認することができ、それらの不自然な英語のキーワード表現を使用する必要がなくなりました。Falkoff と Iverson は 1964 年後半に特別な APL Selectric タイピング要素 987 と 988 を設計しましたが、それらを使用できる APL コンピュータ システムはありませんでした。[16]アイバーソンは、APL文字セットにIBM Selectric型要素を使用するというアイデアのインスピレーションとしてファルコフを挙げた。[17]
多くの APL 記号は、Selectric 入力要素に APL 文字があっても、2 つの既存の要素文字を重ねて入力する必要がありました。たとえば、グレード アップ文字は、デルタ(Shift + H) とSheffer ストローク(Shift + M)で作成する必要がありました。これは、文字が大文字に制限されていたとしても、APL 文字セットが入力要素で許可されている 88 文字よりはるかに大きかったため必要でした。
市販されている
最初のAPL対話型ログインとAPLワークスペースの作成は、1966年にラリー・ブリードが、APLの本拠地であるニューヨーク州ヨークタウンハイツのトーマス・J・ワトソン研究所近くのIBMモハンシック研究所でIBM 1050端末を使用して行いました。 [16]
APLを市場に導入した主な責任者はIBMでした。APLの最初の公開バージョンは1968年にIBM 1130用にリリースされました。IBMはAPL\1130を無料で提供しましたが、責任やサポートはありませんでした。[18] [19] APL\1130はわずか8k 16ビットワードのメモリで動作し、専用の1メガバイトハードディスクを使用しました。
APLは、1960年代後半から1980年代前半にかけて、メインフレームのタイムシェアリングシステムに定着した。これは、動的アドレス変換ハードウェアを持たない低仕様のシステムで複数のユーザーをサポートできたためでもある。 [20]一部のIBM System/370メインフレームシステムのパフォーマンスをさらに向上させたのが、 APLアシストマイクロコードだった。APLアシストマイクロコードでは、APL実行のサポートがプロセッサのファームウェアに組み込まれ、完全に高レベルのソフトウェアで実装されるのではなくなった。その後、1980年代半ばから後半にかけて、適切に機能するハードウェアがようやく利用できるようになり、多くのユーザーがアプリケーションをパーソナルコンピュータ環境に移行した。
IBM 360 および IBM 370 ハードウェア用の初期の IBM APL インタープリタは、ホスト サービスに頼るのではなく、独自のマルチユーザー管理を実装していたため、独自のタイムシェアリング システムでした。1966 年に IBM で初めて導入されたAPL\360 [21] [22] [23]システムは、マルチユーザー インタープリタでした。情報やインタープリタ システム変数の設定のためにオペレーティング システムとプログラム的に通信する機能は、特別な特権を持つ「I ビーム」関数を通じて、モナド演算とダイアディック演算の両方を使用して実行されました。[24]
1973 年、 IBM はAPL.SV をリリースしました。これは同じ製品の継続でしたが、オペレーティング システム ファイルなどの APL システム外部の機能にアクセスする手段として共有変数を提供しました。1970 年代半ばには、IBM メインフレーム インタープリタは、当時のほとんどの小型コンピュータが BASIC のみを提供していたときに、小型 CRT と APL キーボードを備えたIBM 5100デスクトップ コンピュータで使用できるように適応されました。1980 年代には、VSAPLプログラム製品は、会話型モニター システム(CMS)、タイム シェアリング オプション(TSO)、VSPC、MUSIC/SP、およびCICSユーザーに広く使用されました。
1973年から1974年にかけて、パトリック・E・ハガティはメリーランド大学APLインタープリターのスペリーUNIVAC 1100/2200シリーズメインフレームコンピュータの1100ラインへの実装を指揮した。[25] 1974年、学生のアラン・ステベンスは内部関数の実装を任された。[26]ゼロックスAPLは1975年6月から、 CP-Vを実行するゼロックス560とシグマ6、7、9メインフレーム、およびハネウェルCP-6で利用可能になった。[27]
1960年代から1970年代にかけて、IBM APL\360 [23]インタープリタの改良版を使用してAPLサービスを販売するタイムシェアリング会社がいくつか登場した。北米でよく知られていたのは、IP Sharp Associates、Scientific Time Sharing Corporation (STSC)、Time Sharing Resources (TSR)、The Computer Company (TCC) などである。CompuServe も1978年に、DEC の KI および KL 36 ビットマシンで動作する Digital Equipment Corp と Carnegie Mellon の改良版に基づく APL インタープリタで市場に参入した。CompuServe の APL は、商用市場と消費者向け情報サービスの両方で利用可能であった。IBM 4300などのより安価なメインフレームの登場、その後パーソナルコンピュータの登場により、1980年代半ばまでにタイムシェアリング業界はほぼ消滅した。
Sharp APL は、1960 年代に最初はタイムシェアリング サービスとして、その後 1979 年頃からプログラム製品として IP Sharp Associates から提供されました。Sharp APL は、パッケージ(1 つ以上のオブジェクトを 1 つの変数に入れる機能)、ファイル システム、ネストされた配列、共有変数など、多くの言語拡張機能を備えた高度なAPL 実装でした。
APL インタープリタは、他のメインフレームやミニコンピュータの製造元からも提供されており、主なものとしては、 Burroughs、Control Data Corporation (CDC)、Data General、Digital Equipment Corporation (DEC)、Harris、Hewlett-Packard (HP)、Siemens、Xeroxなどがあります。
シラキュース大学のガース・フォスターは、ニューヨーク州ブルーマウンテンレイクにあるシラキュースのミノーブルックカンファレンスセンターでAPL実装者コミュニティの定期的な会合を主催した。後年、ユージン・マクドネルはカリフォルニア州モントレー近郊のアシロマカンファレンスグラウンドとカリフォルニア州ワトソンビル近郊のパハロデューンズで同様の会合を企画した。計算機協会のSIGAPL特別利益団体は、APLコミュニティを支援し続けている。[28]
マイクロコンピュータ
1970年代半ば以降に登場したマイクロコンピュータでは、BASICが主流のプログラミング言語となった。[29]しかし、一部のマイクロコンピュータではAPLが提供されていた。最初のものは1974年に発売されたIntel 8008ベースのMCM/70で[30] [31]、主に教育に使用された。[32]この時期の別のマシンとしては、1977年に発売されたVideoBrain Family Computerがあり、これにはAPL/Sと呼ばれるAPLの方言が付属していた。[33]
1981年に発表されたコモドールスーパーPETには、ウォータールー大学が開発したAPLインタープリタが搭載されていた。[34]
1976年、ビル・ゲイツは愛好家への公開書簡の中で、マイクロソフト社がIntel 8080とMotorola 6800向けにAPLを実装していたが、ソフトウェアの著作権侵害のせいで「愛好家に提供する動機はほとんどなかった」と主張した。[35] APLは結局リリースされなかった。
APL2
1980年代初頭から、ジム・ブラウンのリーダーシップの下、IBM APL開発では、主な機能強化として、配列に他の配列を含めることができるネストされた配列の概念と、ネストされた配列をプログラムワークフローに統合しやすくする新しい言語機能を含む、APL言語の新しいバージョンを実装しました。ケン・アイバーソンは、もはやAPL言語の開発を制御できず、IBMを離れてIP Sharp Associatesに加わり、そこでの彼の主な貢献の1つは、Sharp APLの進化を彼のビジョンにもっと沿うように導くことでした。[36] [37] [38] APL2は、 1984年にCMSとTSO向けに最初にリリースされました。 [39] APL2ワークステーションエディション(Windows、OS/2、AIX、Linux、およびSolaris)は後に続きました。[40] [41]
他のベンダーが新しいハードウェア、特にUnixベースのマイクロコンピュータ用のAPL インタープリタの開発に忙しかったため、新しい APL インタープリタの開発では、ほとんどの場合、APL2 が標準として選ばれました。今日でも、ほとんどの APL ベンダーやそのユーザーは、それらの製品のセールスポイントとして APL2 との互換性を挙げています。[42] [43] IBM は、問題解決、システム設計、プロトタイピング、工学および科学計算、エキスパートシステム、[44]数学やその他の科目の教育、視覚化、データベースアクセスでの APL の使用を挙げています。[45]
最新の実装
APLX、Dyalog などによる APL のさまざまな実装には、オブジェクト指向プログラミングの拡張機能、 .NETのサポート、XML 配列変換プリミティブ、グラフ作成、オペレーティング システム インターフェイス、およびラムダ計算式が含まれています。フリーウェア バージョンには、Linux 用の GNU APL と Windows 用の NARS2000 (Wine の下で Linux でも実行可能) があります。これらは両方とも、さまざまな言語拡張機能を備えた APL2 のかなり完全なバージョンです。
派生言語
APL は以下の言語の基礎を形成し、または影響を与えました: [引用が必要]
- A および A+、代替 APL、後者はグラフィカル拡張機能を備えています。
- 関数型プログラミング言語FP 。
- Ivyは、 Rob Pikeによって開発されたAPLのような言語のインタープリタであり、ASCIIを入力として使用します。[46]
- Jもアイバーソンによって設計され、特殊記号の代わりに二重音字を使ったASCIIを使用しています。 [7]
- Kは、アーサー・ホイットニーによって開発されたAPLの独自の変種である。[8]
- 数値計算ツールMATLAB [6]
- Nial は、関数型プログラミング表記法を備えた高水準配列プログラミング言語です。
- ポリモーフィック プログラミング言語。同様の基本言語を持つ対話型で拡張可能な言語です。
- S 、統計プログラミング言語(現在ではRとして知られるオープンソースバージョンでよく見られます)。
- Snap ! は、 Scratchの拡張再実装として生まれた、ローコードのブロックベースのプログラミング言語です。
- 数値計算インタラクティブ環境、Speakeasy 。
- Wolfram言語、 Mathematicaのプログラミング言語。[47]
言語特性
文字セット
APL は、独自の非標準文字セットを選択したことで、批判も賞賛もされてきた。1960 年代から 1970 年代には、APL 文字セットを再現できる端末デバイスはおろか、ディスプレイさえほとんどなかった。最も一般的な端末デバイスは、特別な APL タイプ要素を使用したIBM Selectric印刷メカニズムを採用していた。初期の APLライン端末(ライン モード操作のみ、フル スクリーンではない) の 1 つは、Texas Instruments TI モデル 745 ( 1977年頃) で、完全な APL 文字セット[48]を備え、 APLタイム シェアリングサービスまたはリモート メインフレームと対話してリモート コンピュータ ジョブ、リモート ジョブ エントリ(RJE) を実行するための半二重および全二重通信モードを備えていた。
時間の経過とともに、高品質のグラフィックディスプレイ、印刷デバイス、Unicodeサポートが広く使用されるようになり、APL文字フォントの問題はほぼ解消されました。ただし、APL文字を入力するには、入力方式エディター、キーボードマッピング、仮想/画面上のAPLシンボルセット、[49] [50]、または簡単に参照できる印刷されたキーボードカードを使用する必要があります。これらは、他のプログラミング言語に慣れている初心者にとってはイライラする可能性があります。[51] [52] [53]他のプログラミング言語の経験がない初心者の場合、高校生を対象とした調査では、APL文字の入力と使用は、学生にとって目に見える形で妨げにはならないことがわかりました。[54]
APL を擁護すると、入力する文字数が少なく、キーボード マッピングは時間の経過とともに記憶される。特別な APL キーボードも作成され、現在も使用されている。Microsoft Windows などのオペレーティング システム用の無料でダウンロードできるフォントも同様である。[49]報告されている生産性の向上は、記号、その意味、キーボード マッピング、一般的なタスクの多くの慣用句を記憶する価値があるほど、言語で作業する時間が十分にあることを前提としている。[要出典]
デザイン
従来の構造化プログラミング言語とは異なり、APLコードは通常、モナド関数またはダイアディック 関数、および配列に作用する演算子[55]の連鎖として構造化されます。[56] APLには、単一のシンボルまたはいくつかのシンボルの組み合わせで示される非標準のプリミティブ(関数と演算子)が多数あります。すべてのプリミティブは同じ優先順位を持つように定義され、常に右に関連付けられます。したがって、APLは右から左に読むか、理解するのが最善です。
初期の APL 実装 ( 1970年頃) には、またはループや構文などのプログラミング ループ制御フロー構造はありませんでした。代わりに配列操作が使用され、1 つのステートメントで配列全体に対して操作を実行できるため、構造化プログラミング構造の使用は多くの場合不要でした。たとえば、関数( ) は for ループの反復を置き換えることができます。ιNをスカラーの正の整数に適用すると、1 次元配列 (ベクトル) 1 2 3 ... N が生成されます。後の APL 実装には通常、包括的な制御構造が含まれるため、データ構造とプログラム制御フローを明確かつきれいに分離できます。
dowhileif-then-elseiotaι
APL環境はワークスペースと呼ばれます。ワークスペースでは、ユーザーはプログラムとデータを定義できます。つまり、データ値はプログラムの外にも存在し、ユーザーはプログラムを定義せずにデータを操作することもできます。[57]以下の例では、APLインタープリターはユーザーの入力を待つ前に、まず6つのスペースを入力します。その出力は1列目から始まります。
ユーザーは、すべての値、プログラム、実行ステータスを含むワークスペースを保存できます。
APL は、従来の算術および代数記法の拡張である非ASCIIシンボルのセットを使用します。単一命令複数データ ( SIMD ) ベクトル関数に 1 文字の名前を使用することは、APL がコンウェイのライフゲームを1 行のコードで計算するなどのデータ変換アルゴリズムをコンパクトに定式化できるようにする 1 つの方法です。 [58] APL のほぼすべてのバージョンでは、理論的には計算可能な関数を 1 つの式、つまり 1 行のコードで表現できます。[要出典]
特殊な文字セットのため、多くのプログラマーはAPLキートップを備えた特別なキーボードを使用してAPLコードを書きます。 [59] ASCII文字のみを使用してAPLコードを書く方法はいくつかありますが、[60]実際にはほとんど行われません。(これは、記法は思考のツールであるというアイバーソンの論文を裏付けるものと考えられるかもしれません。[61] ) 最新の実装のほとんど、あるいはすべてでは、特別なマッピングまたは入力方式エディターを使用して非ASCII文字にアクセスするための標準キーボードレイアウトを使用しています。歴史的に、APLフォントは大文字のイタリック体のアルファベット文字と直立した数字と記号を備えており、特徴的です。ほとんどのベンダーは、APL文字セットをカスタムフォントで表示し続けています。
APL の支持者[誰? ]は、いわゆる書き込み専用コード(下手に書かれていてほとんど理解できないコード) の例は、ほとんど例外なく、どの言語でも起こり得る不適切なプログラミング方法や初心者のミスの例であると主張しています。また、支持者は、APL は従来のコンピュータ言語よりもはるかに生産性が高く、他のテクノロジを使用する場合よりもはるかに短い時間とはるかに少ないプログラマーで動作するソフトウェアを実装できると主張しています。[要出典]
また、APLは簡潔で簡潔なため、コードの行数を大幅に削減できるため、大規模なソフトウェア開発や複雑な開発に適していると主張する人もいる。多くのAPL支持者や実践者は、COBOLやJavaなどの標準的なプログラミング言語も比較的面倒だと考えている。APLは、トレーディングシステムなど、市場投入までの時間が重要な場合によく見られる。[62] [63] [64] [65]
用語
APLでは、関数と演算子が明確に区別されています。[55] [66]関数は配列(変数、定数、または式)を引数として受け取り、結果として配列を返します。演算子(高階関数に似ています)は、関数または配列を引数として受け取り、関連する関数を導出します。たとえば、合計関数は、加算関数に簡約演算子を適用することで導出されます。同じ簡約演算子を最大値関数(2つの数値のうち大きい方を返す)に適用すると、数値のグループ(ベクトル)の最大値を返す関数が導出されます。J言語では、アイバーソンは関数を動詞に、演算子を副詞または接続詞に置き換えました。
APL では、言語に組み込まれ、シンボルまたはシンボルの固定された組み合わせで表現される機能をプリミティブとして識別します。ほとんどのプリミティブは関数または演算子です。APL のコーディングは、主に非プリミティブ関数と (APL の一部のバージョンでは) 演算子を記述するプロセスです。ただし、いくつかのプリミティブは関数でも演算子でもないと見なされ、最も顕著なのは代入です。
APL 文献で使用されている一部の単語は、数学やコンピュータ サイエンスの一般性とは異なる意味を持っています。
構文
APLは関数、演算子、構文を明示的に表現しており、言語の拡張機能を明確かつ明示的に記述するための基礎と、それらを実験するためのツールを提供しています。[70]
例
こんにちは世界
「Hello, world」と表示されます。
'こんにちは世界'
APL の設計テーマは、他のほとんどのプログラミング言語では構文エラーが発生するようなケースでデフォルトのアクションを定義することです。
上記の「Hello, world」文字列定数は表示されます。これは、アクションが明示的に指定されていない式 (割り当て、関数パラメータなど) では、表示がデフォルトのアクションであるためです。
累乗
このテーマのもう 1 つの例として、APL での指数は と表記され2*3、2 の 3 乗を表します (これは言語によっては2^3または と表記されるか、他の言語で2**3は などの関数呼び出しになります)。多くの言語では のように乗算を表すために を使用しますが、APL では を使用します。ただし、基数が指定されていない場合 ( APL の 文や他の言語の場合など)、ほとんどのプログラミング言語ではこれが構文エラーになります。ただし、APL では、指定されていない基数が自然対数定数eであると想定し、を と解釈します。
pow(2, 3);*2*32×3*3^3*32.71828*3
シンプルな統計
Xが数値の配列であると
します。(+/X)÷⍴Xは平均を返します。右から左に読むと、⍴Xは X の要素数を返します。÷は二項演算子なので、その左側の項も必要です。 それを括弧で囲むのは、そうしないと X が取られてしまうためです (つまり、合計はX÷⍴XX の各要素を X の要素数で割ったものになります)。 は+/XX の要素の合計を返します。 これを基に、次の式で標準偏差を計算します。
(( + / (( X - ( + / X ) ÷⍴ X ) * 2 )) ÷⍴ X ) * 0.5
当然、この式は毎回書き直すのではなく、繰り返し使用する関数として定義します。さらに、代入は演算子なので、式の中に出現することができ、次の式は T、AV、および SD に適切な値を配置します。
SD ← (( + / (( X - AV ← ( T ← + / X ) ÷⍴ X ) * 2 )) ÷⍴ X ) * 0.5
6番目を選ぶ宝くじ番号
次の即時モード式は、典型的なPick 6 宝くじ番号のセットを生成し、重複しないことが保証された1 から 40 までの6 つの疑似ランダム 整数を生成し、昇順で並べ替えて表示します。
x [ ⍋ x ← 6 ? 40 ]
上記は簡潔に多くのことを行っていますが、APL初心者には複雑に思えるかもしれません。これは、次のAPL関数(プリミティブ[71]やグリフ[72]とも呼ばれます)を組み合わせています。
- 最初に実行されるのは(APLは右端から左端に向かって実行される)、
?選択された数(左引数:この場合は6)の1から指定された最大値(右引数:この場合は40)までのランダムな整数からなるベクトルを返す二項関数deal(二項関数の場合は名前)であり、最大値がベクトルの長さ以上の場合、重複しないことが保証される。つまり、1から40までの6つのランダムな整数を生成/作成する。[73] - このベクトルは後で必要になるため、変数 に割り当てられます( )。
←x - 次に、このベクトルは、その右側にある次の不均衡な閉じ括弧または閉じ丸括弧までのすべてを右引数として持つモナド関数によって昇順にソートされます。 の結果は、引数を昇順に並べるインデックスです。
⍋⍋ - 次に、 の出力を
⍋使用して、この目的のために以前に保存した変数 のインデックスを作成しx、その項目を昇順で選択します。
左端の x の左側には、APL に結果の処理方法を指示する関数がないため、明示的な指示を必要とせずに、単に結果をディスプレイに出力します (1 行にスペースで区切って出力します)。
?には、と呼ばれるモナド的な同等物もありroll、これは、1 からその唯一のオペランド (その右側にある) までの範囲の 1 つのランダムな整数を返すだけです。したがって、ロールプレイング ゲームプログラムでは、この式を使用して?2020 面ダイスを振ることができます。
素数
次の式は、1 から R までのすべての素数を見つけます。時間と空間の両方において、計算の複雑さは( Big O 表記法) です。
( ~ R ∊ R ∘. × R ) / R ← 1 ↓⍳ R
右から左に実行すると、次のようになります。
- Iotaは から までの整数
⍳を含むベクトルを作成します(プログラムの開始時に である)1RR= 6⍳R1 2 3 4 5 6 - このベクトル(
↓関数)の最初の要素、つまりを削除します1。1↓⍳R2 3 4 5 6 -
R新しいベクトル(←、代入プリミティブ)に設定する。つまり、2 3 4 5 6 /複製演算子は二項演算子であり、インタープリタは最初にその左の引数(完全に括弧内)を評価します。- を掛けた外積、つまりR と R (演算子) の掛け算表である行列を生成します。つまり、
RR°.×
- 外積行列(、集合包含またはの元、またはイプシロン演算子)内の対応する数値の各位置で
Rと同じ長さのベクトルを構築する。つまり、1R∈0 0 1 0 1 - ベクトル内の値を論理的に否定します(0を1に、1を0に変更します)(、論理
∼否定またはチルダ演算子)、つまり、1 1 0 1 0 R対応する要素が1(/複製演算子)である項目を選択します。つまり、2 3 5
(これは、APL の原点が 1 であると仮定しています。つまり、インデックスは 1 から始まります。APL は 0 を原点として使用するように設定できます。つまり、 となりι6、0 1 2 3 4 5一部の計算には便利です。)
ソート
次の式は、行列 X に格納されている単語リストを単語の長さに従って ソートします。
X [ ⍋ X + . ≠ ' ' ;]
人生ゲーム
Dyalog APLで書かれた次の関数「life」[74] [75]は、ブール行列を受け取り、コンウェイのライフゲームに従って新しい世代を計算します。これは、非常に少ないコードで複雑なアルゴリズムを実装するAPLの威力を示していますが、それを理解するには、APLに関する高度な知識が必要です(同じプログラムを多くの言語で実行する場合と同様です)。
人生← { ⊃ 1 ⍵ ∨ . ∧ 3 4 = + / + ⌿ ¯1 0 1 ∘. ⊖ ¯1 0 1 ⌽ ¨ ⊂ ⍵ }
HTMLタグの削除
次の例も Dyalog ですが、最初の行では HTML コードを変数に割り当てtxt、次に APL 式を使用してすべての HTML タグを削除します。
txt ← '<html><body><p>これは<em>強調</em>されたテキストです。</p></body></html>'
{ ⍵ /⍨ ~ { ⍵ ∨≠ \ ⍵ } ⍵ ∊ '<>' } txtこれは強調されたテキストです。
ネーミング
APLはアイバーソンの著書『プログラミング言語』[3]の頭文字からその名前が付けられているが、その著書はアイバーソンの数学的記法について記述したものであり、この記事で説明する実装されたプログラミング言語について記述したものではない。この名前はAPL\360から始まり、実際の実装にのみ使用される。
この名前は、1966 年にIBMで APL\360 を実装していたときにAdin Falkoffによって作られました。
3 人の学生が共有しているオフィスの前を通りかかったとき、口論の音が聞こえました。ドアに頭を突っ込むと、エリックが「私たちが使っている表記法が APL と呼ばれていることは、みんな知っているのではないですか?」と尋ねました。そのように呼ばれるのを聞いたことがないと告白して、彼をがっかりさせてしまったのは残念でした。彼はどこでそれがよく知られていると考えていたのでしょうか? そして、誰がそれをそのように呼ぶことにしたのでしょうか? 実際のところ、なぜ何かに名前をつけなければならなかったのでしょうか? かなり後になって、それがどのように命名されたかを聞きました。1966 年 6 月に実装作業が開始されると、文書化作業も開始されました。おそらく、Falkoff と Iverson は「それ」について書かなければならなかったとき、「それ」に名前を付ける必要があることに気付いたのでしょう。当時はおそらく多くの提案があったと思いますが、私が聞いたのは 2 つだけです。シカゴの SRA で、その表記法を使用して教材を開発していたグループは、「Mathlab」という名前を支持していました。これは普及しませんでした。もう一つの提案は、これを「アイバーソンのより良い数学」と名付けて、人々に適切な頭字語を考えさせるというものだった。これは冗談だとみなされた。
ある日、アディン・ファルコフがケンのオフィスにやって来て、黒板に「プログラミング言語」と書き、その下に「APL」という頭字語を書きました。こうして誕生したのです。それから 1 週間ほど経って、エリック・アイバーソンが私に質問してきました。当時はまだ、その名前が IBM リサーチから IBM モハンシックまでの 13 マイルのタコニック パークウェイに伝わっていませんでした。
— ユージン・マクドネル、[76]
APLは配列プログラミング言語または配列処理言語として再解釈されることがあり[77]、それによってAPLはバックロニムになります。
ロゴ

APLベンダー間の協力関係は常に存在しており、1969年から2010年まで定期的に合同カンファレンスが開催されました。 [78]このようなカンファレンスでは、APLのモチーフやベンダーのロゴを集めたAPLグッズが配布されることがよくありました。よく見かけたのはリンゴ(リンゴとAPLの発音が似ていることにちなんだ語呂合わせ)と、APL修飾キーを押しながら「APL」と入力すると
従来のAPLキーボードレイアウトで生成される記号であるコードスニペットでした。⍺*⎕
こうしたコミュニティの努力にもかかわらず、ベンダーに依存しない汎用的なプログラミング言語のロゴは登場しませんでした。人気のあるプログラミング言語が認識可能なロゴを確立するにつれて、Fortranは2020年にロゴを取得しました。[79]英国APL協会は2021年後半にキャンペーンを開始し、APLのロゴを確立し、コミュニティの選挙と複数回のフィードバックを経て、2022年5月にロゴが選ばれました。[80]
使用
APLは金融や保険のアプリケーション、[81] 人工知能、[82] [83] ニューラルネットワーク[84]ロボット工学 など多くの目的で使用されています。[85] APLは計算ツールであり、プログラミング言語ではないと主張されてきました。 [86] APLの記号的性質と配列機能により、コンピュータプログラマーのスキルを持たない、または必要としないドメイン専門家やデータサイエンティスト[87]の間で人気があります。[要出典]
APLは画像操作やコンピュータアニメーションに適しており、グラフィック変換は行列乗算としてエンコードできます。最初の商用コンピュータグラフィックスハウスの1つであるDigital Effectsは、 VisionsというAPLグラフィックス製品を開発しました。これは、1982年の映画Tronのテレビコマーシャルやアニメーションの作成に使用されました。[88]その後、Stormwindボートシミュレーターは、コアロジック、レンダリングパイプラインミドルウェアへのインターフェイス、物理エンジンの主要部分をAPLで実装しました。[89]
今日、APLは投資管理、[81] 資産管理、[90] [要出典] 医療、[91] DNAプロファイリング など、幅広い商業および科学的アプリケーションで使用されています 。[92] [93]
注目すべき実装
360円
認識可能なAPLシンボルを使用したAPLの最初の実装は、IBM System/360上で実行されたAPL\360であり、1966年11月に完成しました[1]が、その時点ではIBM内でのみ使用されていました。[39] 1973年に、その実装者であるラリー・ブリード、ディック・ラスウェル、ロジャー・ムーアは、計算機協会(ACM)からグレース・マレー・ホッパー賞を受賞しました。これは「対話型システムのシンプルさ、効率性、信頼性、応答時間における新しい基準を確立したAPL\360の設計と実装における功績」に対して贈られました。[94] [95] [96]
1975年、IBM 5100マイクロコンピュータは、コンピュータ用の2つの組み込みROMベースの解釈型言語の1つとしてAPL\360 [97]を提供し、言語で使用されるすべての特殊記号をサポートするキーボードとディスプレイを完備していました。[98]
APL\360の重要な開発には、 CMSの仮想ストレージ機能を利用したCMS/APLと、共有変数、システム変数、システム関数を導入したAPLSVが含まれていました。その後、 IBM System/370およびVSPCプラットフォームに移植され、1983年に最終リリースされ、その後APL2に置き換えられました。[39]
1130円
1968年、APL\1130はIBMがIBM 1130用に作成した最初の公開APLシステムとなった。[99]これはIBMがリリースした最も人気のあるIBM Type-IIIライブラリソフトウェアとなった。[100]
APL*PlusとSharp APL
APL*PlusとSharp APLは、データフォーマットやAPL配列を外部ファイルに保存する機能など、ビジネス向けの拡張機能が追加されたAPL\360のバージョンです。これらは、元のIBM APL\360開発チームのさまざまなメンバーを採用した2つの企業によって共同開発されました。[101]
2つの会社は、1964年にイアン・シャープ、ロジャー・ムーアらによって設立されたAPL\360サービス会社であるIP Sharp Associates (IPSA)と、 1969年にローレンス・ブリードらによって設立されたタイムシェアリングおよびコンサルティングサービス会社であるSTSCであった。 2社は共同でAPL*Plusを開発し、その後も協力しながらAPLをAPL*PlusとSharp APLとして別々に開発していった。 STSCはAPL*Plusを多くのプラットフォームに移植し、VAX 11、 [102] PC、UNIX用のバージョンを作成したが、 IPSAはパーソナルコンピュータの登場に対して別のアプローチを取り、追加のPC-XT/360ハードウェアを使用することでこのプラットフォームでSharp APLを利用できるように した。 1993年に、Sharp APLをサポートするためにソリトン株式会社が設立され、Sharp APLをSAX (Sharp APL for Unix)に開発した。[アップデート]
1985年、イアン・シャープとSTSCのダン・ダイアーは、APLへの顕著な貢献に対してケネス・E・アイバーソン賞を共同で受賞しました。[103]
APL2
APL2はIBMによるAPLの重要な再実装であり、1971年から開発され、1984年に初めてリリースされました。言語に多くの追加機能を提供しますが、最も注目すべきはネストされた(非長方形)配列のサポートです。[39] APL2製品およびサービスチーム全体が2007年にアイバーソン賞を受賞しました。[103]
2021年にIBMはAPL2をLog-On Softwareに売却し、同社はLog-On APL2として製品を開発・販売した。[104]
アプルゴル
1972年、APLGOLは言語フレームワークに構造化プログラミング言語構造を追加したAPLの実験版としてリリースされました。文間制御、条件文実行、文構造化のための新しい文と、アルゴリズムの意図を明確にする文が追加されました。[105] 1977年にヒューレット・パッカード向けに実装されました。[106]
ダイアログAPL
Dyalog APLは、1983年にイギリスのDyalog Ltd. [107]によって初めてリリースされ、 [108] 2018年現在、AIX、Linux ( Raspberry Piを含む)、macOS、Microsoft Windows[アップデート]プラットフォームで利用できます。APL2に基づいており、オブジェクト指向プログラミング、[109]関数型プログラミング、[110]および暗黙プログラミングをサポートする拡張機能を備えています。[111]ライセンスは、個人/非商用での使用に限り無料です。[112]
1995年、開発チームの2人、ジョン・スコールズとピーター・ドネリーは、インタープリターの開発でアイバーソン賞を受賞しました。[103]ギッテ・クリステンセンとモーテン・クロムバーグは、2016年にアイバーソン賞を共同受賞しました。[113]
ナーズ2000
NARS2000は、1970年代から1980年代にかけてSTSCで著名なAPL開発者および実装者であったボブ・スミスによって書かれたオープンソースのAPLインタープリタです。NARS2000には高度な機能と新しいデータ型が含まれており、 Microsoft WindowsやWineの他のプラットフォームでネイティブに動作します。1980年代の開発ツールであるNARS(Nested Arrays Research System)にちなんで名付けられました。[114]
APLX
APLXはAPL2をベースにいくつかの拡張機能を備えたAPLのクロスプラットフォーム 方言であり、2002年に英国のMicroAPL社によって最初にリリースされました。現在は開発も商用販売もされていませんが、Dyalogから無料で入手できます。[115]
ヨークAPL
York APL [116]は、1968年頃にオンタリオ州ヨーク大学で開発され、IBM 360メインフレーム上で実行されました。APL\360との顕著な違いの1つは、スカラーの「形状」(ρ)を1と定義したのに対し、APL\360ではより数学的に正しい0と定義していたことです。これにより、スカラーとベクトルで同じように動作する関数の記述が容易になりました。
GNU APL
GNU APLはISO/IEC 13751:2001で規定されたExtended APLのフリーな実装であり、APL2の実装である。Linux、macOS、いくつかのBSD方言、Windows(すべてのシステム機能を完全にサポートするためにCygwinを使用するか、一部のシステム機能が欠落しているネイティブ64ビットWindowsバイナリとして)で動作する。GNU APLは内部的にUnicodeを使用し、スクリプト化できる。Jürgen Sauermannによって書かれた。[117]
GNUプロジェクトの創設者リチャード・ストールマンはAPLの早期採用者であり、1969年の夏に高校生としてAPLを使ってテキストエディタを作成した。[118]
APLの解釈と編集
APLは伝統的にインタプリタ型言語であり、弱い変数型付けなどの言語特性があり、コンパイルには適していません。[119]しかし、配列をコアデータ構造とすることで[120] 、並列処理、[121]並列コンピューティング、[122] [123]超並列アプリケーション、[124] [125]および超大規模集積回路(VLSI) [126] [127]によるパフォーマンス向上の機会を提供し、当初からAPLは高性能言語と見なされてきました。 [128]たとえば、APLは「配列を操作し、内部で行列の反転などの操作を実行するため」複雑な行列演算を高速に実行できることで知られています。[129]
ただし、APL が純粋に解釈されることはめったになく、現在使用されている、または使用されていたコンパイルまたは部分コンパイル手法には次のものがあります。
慣用句認識
ほとんどのAPLインタープリタはイディオム認識をサポートしており[130]、一般的なイディオムを単一の操作として評価します。[131] [132]たとえば、イディオムをBV/⍳⍴A単一の操作として評価することにより(ここで、BVはブールベクトルであり、Aは配列です)、2つの中間配列の作成が回避されます。[133]
最適化されたバイトコード
APL の弱い型付けとは、名前が配列 (任意のデータ型)、関数、または演算子を参照できることを意味します。一般に、インタープリタはそれがどの形式になるかを事前に知ることができないため、実行時に分析、構文チェックなどを実行する必要があります。[134]ただし、特定の状況では、名前が参照すると予想される型を事前に推測し、実行時のオーバーヘッドを減らして実行できるバイトコードを生成することができます。このバイトコードは、定数の折りたたみや共通部分式の削除などのコンパイル手法を使用して最適化することもできます。[135]インタープリタは、バイトコードが存在し、行われた仮定が満たされている場合にそれを実行します。Dyalog APL には、最適化されたバイトコードのサポートが含まれています。[135]
コンパイル
APLのコンパイルは、言語が最初に利用可能になって以来、研究と実験の対象となってきました。最初のコンパイラは、1971年頃にリリースされたBurroughs APL-700 [136]であると考えられています。 [137] APLをコンパイルできるようにするには、言語の制限を課す必要があります。[136] [138] APEXは、 Robert Berneckyによって書かれた研究用APLコンパイラであり、 GNU General Public Licenseの下で利用可能です。[139]
STSC APLコンパイラはバイトコードオプティマイザとコンパイラのハイブリッドであり、サブ関数とグローバルが宣言されている限り関数をマシンコードにコンパイルできますが、インタープリタはランタイムライブラリとして使用され、コンパイル要件を満たさない関数を実行します。[140]
標準
APL は、米国規格協会(ANSI) のワーキング グループX3J10 および国際標準化機構(ISO) と国際電気標準会議(IEC) の ISO/IEC 合同技術委員会 1 小委員会 22 ワーキング グループ 3 によって標準化されています。コア APL 言語は ISO 8485:1989 で指定され、拡張 APL 言語は ISO/IEC 13751:2001 で指定されています。
参考文献
- ^ ab 「APL の引用と逸話」。jsoftware.com。2018年4 月 14 日閲覧。
- ^ "std::iota". cppreference.com .
- ^ abc Kenneth E. Iverson (1962年12月1日). プログラミング言語. Wiley . ISBN 978-0-471-43014-8。OL 26792153M。ウィキデータ Q105954505 。2023-08-06に取得。
- ^ McIntyre, Donald B. (1991). 「知的ツールとしての言語: ヒエログリフからAPLまで」IBM Systems Journal . 30 (4): 554– 581. doi :10.1147/sj.304.0554. 2016年3月4日時点のオリジナルよりアーカイブ。2015年1月9日閲覧。
- ^ 「ACM Award Citation – John Backus」。Awards.acm.org。1977年。2008年2月12日時点のオリジナルよりアーカイブ。2010年2月3日閲覧。
- ^ ab Moler, Cleve. 「MATLAB の成長」(PDF)。2009 年 4 月 11 日時点のオリジナル(PDF)からアーカイブ。2010 年2 月 3 日閲覧。
- ^ ab Hui, Roger. 「A Bibliography of APL and J」. jsoftware.com/jwiki . 2010 年3 月 2 日閲覧。
- ^ ab 「アーサー・ホイットニーとのインタビュー」 Kx Systems. 2004年1月4日. 2009年4月4日時点のオリジナルよりアーカイブ。2010年3月2日閲覧。
- ^ Iverson, Kenneth E.、「Automatic Data Processing: Chapter 6: A programming language」、Wayback Machineで 2009 年 6 月 4 日にアーカイブ、1960 年、Brooks と Iverson の 1963 年の著書Automatic Data Processingの草稿。
- ^ ブルックス、フレッド; アイバーソン、ケネス、(1963)、「Automatic Data Processing」、John Wiley & Sons Inc.
- ^ 「Turing Award Citation 1979」。Awards.acm.org。2009年12月23日時点のオリジナルよりアーカイブ。2010年2月3日閲覧。
- ^ Hellerman, H. (1964年7月). 「実験的パーソナライズアレイトランスレータシステム」Communications of the ACM . 7 (7): 433– 438. doi : 10.1145/364520.364573 . S2CID 2181070.
- ^ Falkoff, Adin D. ; Iverson, Kenneth E. (1978 年 8 月). 「APL の進化」. ACM SIGPLAN Notices . 13 (8): 47– 57. doi :10.1145/960118.808372.
- ^ Abrams, Philip S.、「Iverson 表記法のインタープリター」、技術レポート: CS-TR-66-47、スタンフォード大学コンピューターサイエンス学部、1966 年 8 月。
- ^ Haigh, Thomas (2005). 「伝記: Kenneth E. Iverson」. IEEE Annals of the History of Computing . doi :10.1109/MAHC.2005.4.
- ^ ab Breed, Larry、「最初の APL ターミナルセッション」、APL Quote Quad、Association for Computing Machinery、第 22 巻、第 1 号、1991 年 9 月、p. 2–4。
- ^ 2009 年 19 日、Adin Falkoff – コンピュータ歴史博物館。「アイバーソンは、APL という名前を選んだことと、プログラムを表す有名な文字セットを提供する交換用タイプヘッドを備えた IBM ゴルフボール タイプライターの導入を彼の功績だとした。」
- ^ Breed, Larry (2006年8月). 「How We Got to APL\1130」. Vector (British APL Association) . 22 (3). ISSN 0955-1433. 2008年5月12日時点のオリジナルよりアーカイブ。 2007年4月2日閲覧。
- ^ APL\1130 マニュアル 2011-02-21 に Wayback Machineにアーカイブ、1969 年 5 月
- ^ 「Remembering APL」Quadibloc.com . 2013年6月17日閲覧。
- ^ Falkoff, Adin; Iverson, Kenneth E.、「APL\360 ユーザーズ ガイド」Wayback Machineに 2012-02-29 にアーカイブ、IBM Research、Thomas J. Watson Research Center、Yorktown Heights、NY、1968 年 8 月。
- ^ 「APL\360 ターミナル システム」Wayback Machineに 2010 年 7 月 11 日にアーカイブ、IBM Research、Thomas J. Watson Research Center、1967 年 3 月。
- ^ ab パキン、サンドラ (1968)。APL \ 360リファレンスマニュアル。サイエンスリサーチアソシエイツ社。ISBN 978-0-574-16135-2。
- ^ Falkoff, Adin D.; Iverson, Kenneth E., The Design of APL, IBM Journal of Research and Development , Volume 17, Number 4, July 1973. 「これらの環境定義関数は、さらに別のクラスの関数の使用に基づいていました。これらの関数は、シンボルの形状から「I ビーム」と呼ばれ、APL プログラムとシステムのそれほど抽象化されていない部分との間の通信に、より一般的な機能を提供します。I ビーム関数は、システム プログラマーによって最初に導入され、APL プログラム内から System/360 命令を実行できるようにし、プログラミング作業の直接的な補助として APL を使用できるようにしました。言語の一部であると思われるこの種の関数の明らかな利便性により、誰でも直接使用できるモナド I ビーム関数が導入されました。この関数のさまざまな引数により、使用可能なスペースや時刻などの環境に関する情報が得られました。」
- ^ Minker, Jack (2004 年 1 月)。「2.3.4 CSC におけるコンピュータ ソフトウェア開発、1962 ~ 1973 年」。メリーランド大学におけるコンピューティングとコンピュータ サイエンスの始まり(PDF) (レポート)。メリーランド大学。38 ページ。2011 年 6 月 10 日時点のオリジナル(PDF)からアーカイブ。2011年5 月 23 日閲覧。
- ^ Stebbens, Alan. 「How it all began」。2016年3月4日時点のオリジナルよりアーカイブ。2011年5月22日閲覧。
- ^ 「Xerox APL 言語および操作リファレンス マニュアル」(PDF)。2022 年 10 月 9 日時点のオリジナルよりアーカイブ(PDF) 。
- ^ 「SIGAPL」Sigapl.org . 2013年6月17日閲覧。
- ^ 「コンピューターをパーソナルにしたプログラミング言語、BASICの50年」Time誌、2014年4月29日。 2018年4月29日閲覧。
- ^ “MCM Computers M70/M700”. old-computers.com . 2018年4月3日時点のオリジナルよりアーカイブ。2018年4月8日閲覧。
- ^ Stachniak, Stachniak (2011). PC の発明 : MCM/70 の物語。マギル クイーンズ大学出版局。ISBN 978-0-7735-3852-8。
- ^ ミラー、マイケル (2014 年 12 月 17 日)。「Altair への道を切り開いた PC」。PC Magazine。Ziff Davis。2018年4 月 29 日閲覧。
- ^ 「VideoBrain Family Computer」、Popular Science、1978年11月、広告。
- ^ 「SuperPet の概要」。Compute!。Small System Services Inc. 1981 年 12 月。2018 年4 月 29 日閲覧。
- ^ ビル・ゲイツ(1976年1月31日)。「愛好家への公開書簡」。Homebrew Computer Club Newsletter 。 2018年4月29日閲覧。
- ^ ロジャー・フイ。「ケン・アイバーソンを偲んで」keiapl.org KEIAPL 2015年1月10日閲覧。
- ^ 「Kenneth E. Iverson」。ACM AM チューリング賞。ACM 。 2015年1月10日閲覧。
- ^ 「APL2: 初期: 技術的な問題で妥協できるか、また妥協すべきか?」SIGPLAN 配列プログラミング言語の章。ACM。2015年1 月 10 日閲覧。
- ^ abcd Falkoff, Adin D. (1991). 「IBM APL システム ファミリー」. IBM Systems Journal . 30 (4): 416– 432. doi :10.1147/sj.304.0416. S2CID 19030940.
- ^ “IBM APL2”. EDM2 . 2019-10-09. 2021-11-17時点のオリジナルよりアーカイブ。 2021-11-17に閲覧。
- ^ 「APL2: 新機能」ibm.com . IBM . 2018年4月22日閲覧。
- ^ Micro APL. 「APL システムの概要」. microapl.com . Micro APL . 2015 年1 月 10 日閲覧。
- ^ Robertson, Graeme. 「A Personal View of APL2010」. archive.vector.org.uk . Vector – Journal of the British APL Association. 2015年4月2日時点のオリジナルよりアーカイブ。 2015年1月10日閲覧。
- ^ Rodriguez, P.; Rojas, J.; Alfonseca, M.; Burgos, JI (1989). 「APL2/PC で書かれた化学合成のエキスパートシステム」. ACM SIGAPL APL Quote Quad . 19 (4): 299– 303. doi :10.1145/75144.75185. S2CID 16876053.
- ^ 「APL2: 問題解決、視覚化、データベースアクセスのためのプログラミング言語」www-03.ibm.com。IBM。2013年11月22日時点のオリジナルよりアーカイブ。2015年1月10日閲覧。
- ^ Pike, Rob (2018-03-25). 「Ivy」. GoDoc . 2019-08-13時点のオリジナルよりアーカイブ。
- ^ 「Wolfram Language FAQ」。Wolfram 。 2020年2月20日閲覧。LISP
とAPLは初期に影響を与えた2つの言語でした。
- ^ Texas Instruments (1977). 「TI 745 全面広告: 新しい文字セットの紹介」. Computerworld . 11 (27): 32. 2015年1月20日閲覧。
- ^ ab 「APL フォントとキーボード」。Dyalog Ltd. 2004–2024 . 2024年11月1日閲覧。
- ^ スミス、ボブ。「NARS2000 キーボード」。www.sudleyplace.com。ボブ・スミス; NARS2000 。2015 年1 月 19 日閲覧。
- ^ 「APL 入門 – APL シンボル」www.microapl.co.uk . MicroAPL Ltd . 2015 年1 月 8 日閲覧。
- ^ Brown, James A.; Hawks, Brent; Trimble, Ray (1993). 「APL 文字セットの拡張」. ACM SIGAPL APL Quote Quad . 24 (1): 41– 46. doi :10.1145/166198.166203.
- ^ Kromberg, Morten. 「APL の Unicode サポート」。archive.vector.org.uk。Vector、英国 APL 協会誌。2015 年 1 月 20 日時点のオリジナルよりアーカイブ。2015 年1 月 8 日閲覧。
- ^ Hsu, Aaron. 「APL によるコンピューター サイエンスのアウトリーチと教育」。Dyalog, Ltd. 2016 年 8 月 17 日時点のオリジナルよりアーカイブ。2016年7 月 15 日閲覧。
- ^ ab MicroAPL. 「Operators」. www.microapl.co.uk . MicroAPL . 2015年1月12日閲覧。
- ^ プリミティブ関数。「プリミティブ関数」。www.microapl.co.uk /。 2015年1月1日閲覧。
- ^ ワークスペース。「ワークスペース」。www.microapl.co.uk 。 2015年1月1日閲覧。
- ^ "example". Catpad.net. 2013年7月8日時点のオリジナルよりアーカイブ。2013年6月17日閲覧。
- ^ 「APLシンボルの入力」www.microapl.co.uk . 2015年1月1日閲覧。
- ^ Dickey, Lee (1993). 「A list of APL Transliteration Schemes」. 2006-09-29時点のオリジナルよりアーカイブ。
- ^ Iverson, KE (1980年8月). 「Notation as a Tool of Thought」. Communications of the ACM . 23 (8): 444– 465. doi :10.1145/358896.358899. 2013年9月20日時点のオリジナルよりアーカイブ。
- ^ バテンブルク。 「APL効率」。www.ekevanbatenburg.nl 。2015 年1 月 1 日に取得。
- ^ Vaxman. 「APL Great Programming」(PDF)www.vaxman.de。2022年10月9日時点のオリジナルよりアーカイブ(PDF) 。 2015年1月1日閲覧。
- ^ Janko, Wolfgang (1987 年5 月)。「推論マシンのプログラミングに APL を使用した場合の効率性の調査」。ACM SIGAPL APL Quote Quad。17 ( 4): 450– 456。doi :10.1145/384282.28372。
- ^ Borealis. 「なぜ APL なのか?」www.aplrealis.com 。 2015 年1 月 1 日閲覧。
- ^ Iverson, Kenneth E. (1987). 「A Dictionary of APL」www.jsoftware.com . 2015年1月20日閲覧。
- ^ abcdef 「APL コンセプト」。Microapl.co.uk。2010年2 月 3 日閲覧。
- ^ 「ネストされた配列理論」。Nial.com。2011年7月9日時点のオリジナルよりアーカイブ。2010年2月3日閲覧。
- ^ abc 「Programmera i APL」、Bohman、Fröberg、Studentlitteratur、ISBN 91-44-13162-3
- ^ Iverson, Kenneth E. (1983). 「APL 構文とセマンティクス」www.jsoftware.com . IP Sharp Associates . 2015 年1 月 11 日閲覧。
- ^ MicroAPL. 「APL Primitives」. www.microapl.co.uk . MicroAPL . 2015 年1 月 11 日閲覧。
- ^ 「APL フォント - 追加の APL グリフ」。wiki.nars2000.org。NARS2000。2015年1月 11日閲覧。
- ^ Fox, Ralph L. 「Systematically Random Numbers」www.sigapl.org . SIGAPL . 2015年1月11日閲覧。
- ^ Scholes, John (2009年1月26日). APLでのConwayのライフゲーム(ビデオ). YouTube . 2021年11月20日閲覧。
- ^ さらなる技術的詳細は、APL Wiki の記事「Conway のライフゲーム」を参照してください。2021 年 11 月 20 日に閲覧。
- ^ McDonnell, EE The introduction to A Source Book in APL、APL Press、1981年。(本全体のスキャン)
- ^ Acharya, R; Pereira、(904567457) NE APLプログラミング言語 Archived 2021-11-03 at the Wayback Machine . バージニア工科大学のCS5314 (プログラミング言語の概念) の論文。
- ^ APL Wiki. APLカンファレンス。2021年10月13日閲覧。
- ^ ジェイコブ・ウィリアムズ。『退化円錐:ニューブラッド』。2021年10月13日閲覧。
- ^ APL Wiki。APL ロゴ。2022 年 5 月 20 日閲覧。
- ^ ab "2017 Annual Report" (PDF) . SimCorp. 2018年2月1日。 2022年10月9日時点のオリジナルよりアーカイブ(PDF) 。 2018年4月3日閲覧。Sofia
は、SimCorp Dimensionのようなフロントツーバックの投資管理プラットフォームです。... Sofiaは、SimCorp Dimensionの一部と同様に、APLコーディング言語に基づいています。
- ^ Lee, Georges; Lelouche, Ruddy; Meissonnier, Vincent ; Zarri, Gian Piero (1982 年 9 月 1 日)。「人工知能環境での APL の使用」。ACM SIGAPL APL Quote Quad。13 ( 1): 183– 191。doi : 10.1145/390006.802242。2018年4 月 3 日閲覧。
- ^ Fordyce, K.; Sullivan, G. (1985). 「人工知能開発支援」. APL Quote Quad . APL 85 Conf. Proc. (15): 106– 113. doi : 10.1145/255315.255347 .
- ^ Alfonseca, Manuel (1990 年 7 月). 「APL のニューラル ネットワーク」. ACM SIGAPL APL Quote Quad . 20 (4): 2– 6. doi : 10.1145/97811.97816 . 2018 年4 月 3 日閲覧。
- ^ クロムバーグ、モーテン。 「APL でのロボット プログラミング」。www.dyalog.com/ 。2015 年1 月 6 日に取得。
- ^ Holmes, WN (1978 年 5 月). 「APL はプログラミング言語か?」.コンピュータジャーナル. 21 (2): 128– 131. doi : 10.1093/comjnl/21.2.128 .
- ^ Hsu, Aaron (2017 年 11 月 18 日). 「APL におけるデザイン パターンとアンチパターン」. functionalconf.com . 2018 年 3 月 23 日時点のオリジナルよりアーカイブ。2018 年 4 月 7 日閲覧。
- ^ マグネナット=タールマン、ナディア;ダニエル、タルマン (1985)。コンピュータアニメーションの理論と実践。スプリンガー・フェルラーグ。 p. 38.ISBN 9784431684336. 2018年4月3日閲覧。
デジタル・エフェクツはトロンを手がけた別の制作会社である。同社はレーザースキャンシステムを使用して画像をデジタル化し、保存し、再現した。デジタル・エフェクツの社長であるジャドソン・ローズブッシュは、現在使用されている2つのコンピュータアニメーションパッケージ、APL VISIONとFORTRAN VISIONの主要設計者である。
- ^ Gutsell, Sam (2017 年 10 月 17 日). 「Stormwind Simulator at Dyalog '16」. www.optima-systems.co.uk . Optima Systems . 2018 年4 月 3 日閲覧。Stormwind
は、APL コミュニティで大きな注目を集めている [3D ボート シミュレーター] です。
- ^ “OP-Pohjola ja Tieto hoitivat sovelluksen muutostyöt sujuvalla yhteistyöllä” [ OP-Pohjolaと Tieto のスムーズな連携によりアプリの修正が可能] (PDF)。www.tieto.com (フィンランド語)。ティエト。2022-10-09 のオリジナル(PDF)からアーカイブされました。2018 年4 月 3 日に取得。[永久リンク切れ ]
- ^ 「Vi idag」 [私たちは今日] 。profdoccare.se (スウェーデン語)。2018年4月7日時点のオリジナルからアーカイブ。 2018年4月3日閲覧。
技術プラットフォームとしてAPLを選択することにより、実行可能なプロトタイプと呼べるソリューションを比較的簡単に素早く構築できます (オリジナルからの翻訳)
- ^ Brenner, Charles. 「DNA 識別技術と APL」。dna -view.com。2005 APL ユーザー カンファレンスでのプレゼンテーション。2015年1 月 9 日閲覧。
- ^ Brenner, Charles (2014年10月17日). 「There's DNA Everywhere – an Opportunity for APL」www.youtube.com . YouTube. 2021年11月14日時点のオリジナルよりアーカイブ。 2015年1月9日閲覧。
- ^ 「Awards – 1973 – Lawrence Breed」。Association for Computing Machinery。2012年4月2日時点のオリジナルよりアーカイブ。
- ^ 「Awards – 1973 – Richard Lathwell」。Association for Computing Machinery。2012年4月2日時点のオリジナルよりアーカイブ。
- ^ 「Awards – 1973 – Roger Moore」。Association for Computing Machinery。2012年4月2日時点のオリジナルよりアーカイブ。
- ^ “IBM 5100”. old-computers.com . 2018年4月30日時点のオリジナルよりアーカイブ。2018年4月8日閲覧。
- ^ 「IBM、パーソナルコンピューティングへようこそ」。Byte 、 1975年12月、p.90 。 2018年4月29日閲覧。
- ^ 「APL の年表とコンピュータ言語開発への影響」www.sigapl.org . ACM . 2018 年4 月 29 日閲覧。
- ^ Larry Breed (2006年8月). 「How We Got To APL\1130」. Vector (British APL Association) . 22 (3). ISSN 0955-1433. 2008年5月12日時点のオリジナルよりアーカイブ。 2018年4月29日閲覧。
- ^ Roger Moore (2005). 「IP Sharp Associates のタイムシェアリングとネットワークの歴史」Rogerdmoore.ca . Roger Moore. 2019年4月4日時点のオリジナルよりアーカイブ。 2018年3月7日閲覧。
- ^ Blumenthal, Marcia (1981年5月18日). 「VAX-11sがAPLプロセッサを採用」. Computerworld . 2018年4月22日閲覧。
- ^ abc 「APL への優れた 貢献に対する Kenneth E. Iverson 賞」。SIGPLAN配列プログラミング言語の章 (SIGAPL)。2012 年 2 月 26 日時点のオリジナルよりアーカイブ。
- ^ Mark Schora (2021-01-26). 「Log-On SoftwareがLog-On APL2を発表」Log-On Software . 2021年11月17日閲覧。
- ^ Kelley, RA (1973). 「APLGOL、実験的構造化プログラミング言語」IBM Journal of Research and Development . 17 : 69– 73. doi :10.1147/rd.171.0069.
- ^ Johnston, Ronald L. (1977 年 7 月)。「APLGOL: APL の構造化プログラミング機能」。Hewlett-Packard Journal。
- ^ 「Dyalog Ltd ウェブサイト」 。2018年6 月 6 日閲覧。
- ^ 「Dyalog 25周年」(PDF)。Vector Magazine。 英国APL協会。 2008年9月。 2018年4月14日閲覧。[永久リンク切れ ]
- ^ クロムバーグ、モルテン (2007 年 10 月 22 日)。 「オブジェクトの配列」(PDF)。動的言語に関する 2007 年のシンポジウムの議事録。 p. 20.土井:10.1145/1297081.1297087。ISBN 9781595938688. S2CID 18484472. 2022年10月9日時点のオリジナルよりアーカイブ(PDF) 。 2018年8月27日閲覧。
- ^ Scholes, John. 「D: Dyalog APL の機能サブセット」。英国 APL 協会。
- ^ Scholes, John. 「D 関数の暗黙形式への変換」 Dyalog Ltd.
- ^ 「Dyalog – 価格とライセンス」。
- ^ 「2016 Iverson Award が Dyalog の CEO と CXO を表彰」2018 年6 月 6 日閲覧。
- ^ 「Nested Arrays Research System – NARS2000: An Experimental APL Interpreter」。NARS2000。Sudley Place Software 。 2015年7月10日閲覧。
- ^ 「APLXは商用販売が中止されましたが、無料でダウンロードできます」。Microapl.com 。 2018年4月14日閲覧。
- ^ 「ヨークAPL」.
- ^ 「GNU APL」。directory.fsf.org。フリーソフトウェアディレクトリ。 2013年9月28日閲覧。
- ^ Stallman, Richard M. 「RMS Berättar」。2018年11月26日時点のオリジナルよりアーカイブ。2018年4月22日閲覧。
- ^ バッド、ティモシー (1988)。APL コンパイラ。Springer- Verlag。ISBN 978-0-387-96643-4。
- ^ 「APL とは?」www.sigapl.org . SIGAPL . 2015 年1 月 20 日閲覧。
- ^ Ju, Dz-Ching; Ching, Wai-Mee (1991). 「共有メモリMIMDマシンでのAPLデータ並列処理の活用」ニュースレターACM SIGPLAN Notices . 26 (7): 61– 72. doi :10.1145/109625.109633. S2CID 8584353.
- ^ Hsu, Aaron W.; Bowman, William J. 「Revisiting APL in the Modern Era」(PDF)www.cs.princeton.edu。2022年10月9日時点のオリジナルよりアーカイブ(PDF)。2015年1月20日閲覧。
- ^ Ching, W.-M.; Ju, D. (1991). 「RP3 での自動並列化 APL プログラムの実行」IBM Journal of Research & Development . 35 (5/6): 767– 777. doi :10.1147/rd.355.0767. 2016 年 3 月 3 日時点のオリジナルよりアーカイブ。2015年1 月 20 日閲覧。
- ^ Blelloch, Guy E.; Sabot, Gary W. (1990). 「超並列コンピュータへのコレクション指向言語のコンパイル」Journal of Parallel and Distributed Computing . 8 (2): 119– 134. CiteSeerX 10.1.1.51.5088 . doi :10.1016/0743-7315(90)90087-6.
コレクション指向言語には、APL、APL2 などがあります。
- ^ Jendrsczok, Johannes; Hoffmann, Rolf; Ediger, Patrick; Keller, Jörg. 「GCA マシンでの APL のようなデータ並列関数の実装」(PDF)。www.fernuni-hagen.de。 pp. 1– 6。 2015 年 1 月 22 日のオリジナル(PDF)からアーカイブ。 2015 年1 月 22 日取得。
GCA – Global Cellular Automation。 本質的に超並列。 「APL が選ばれたのは、行列とベクトルの構造を表現できるためです。」
- ^ Brenner, Norman (1984). 「APL と Fortran サブルーチンを使用した VLSI 回路設計」。APLに関する国際会議の議事録 - APL '84。第 14 巻。pp. 77– 79。doi : 10.1145 /800058.801079。ISBN 0-89791-137-7. S2CID 30863491.
インタラクティブ性とコーディングの容易さを実現する APL
• Brenner, Norman (1984)。「APL と Fortran サブルーチンを使用した VLSI 回路設計」。APLに関する国際会議の議事録 - APL '84。ACM SIGAPL。ISBN 978-0897911375。 - ^ Gamble, DJ; Hobson, RF (1989). 「VLSI モジュール ジェネレータを構築するためのグラフィックス/手続き型環境に向けて」. IEEE Pacific Rim Conference on Communications, Computers and Signal Processing 会議議事録. pp. 606– 611. doi :10.1109/PACRIM.1989.48437. S2CID 7921438.
VLSI モジュール ジェネレータについて説明します。インタープリタ型およびコンパイル型言語の例として、APL および C は、高度なグラフィックス ディスプレイにインターフェイスできます。
- ^ Lee, Robert S. (1983). 「APL の 2 つの実装」. PC Magazine . 2 (5): 379. 2015 年1 月 20 日閲覧。
- ^ 「APL コンピュータ言語」。MARTHAおよび LLAMA。2015年 2 月 13 日時点のオリジナルよりアーカイブ。2015 年1 月 20 日閲覧。
- ^ メッツガー、ロバート、ウェン、ザオファン(2000)。自動アルゴリズム認識と置換:プログラム最適化への新しいアプローチ。MITプレス。ISBN 9780262133685. 2018年5月6日閲覧。
- ^ Snyder, Lawrence (1982). 「コード最適化のためのイディオムの認識と選択」. Acta Informatica . 17 (3). doi :10.1007/BF00264357. S2CID 8369972.
- ^ Cheng, Feng Sheng (1981). イディオムマッチング: APLコンパイラの最適化手法 (論文). アイオワ州立大学. 2018年5月6日閲覧。
- ^ 「イディオム認識」dyalog.com . 2018年5月6日閲覧。
- ^ Strawn, George O. (1977 年3 月)。「APL には本当に実行時解析が必要なのか?」ソフトウェア: 実践と経験。7 (2): 193– 200。doi :10.1002/spe.4380070207。S2CID 1463012 。
- ^ ab 「コンパイラユーザーガイド」(PDF) 。www.dyalog.com。Dyalog Ltd. 2022年10月9日時点のオリジナルよりアーカイブ(PDF) 。 2018年5月7日閲覧。
- ^ ab Driscoll, Graham C. Jr.; Orth, Donald L. (1986 年 11 月). 「APL のコンパイル: Yorktown APL トランスレータ」. IBM Journal of Research and Development . 30 (6): 583– 593. doi :10.1147/rd.306.0583. S2CID 2299699.
- ^ 「APLの年表」www.sigapl.org . ACM . 2018年5月7日閲覧。
- ^ Wai-Mee, Ching (1986 年 11 月). 「APL/370 コンパイラにおけるプログラム分析とコード生成」. IBM Journal of Research and Development . 30 (6): 594– 602. doi :10.1147/rd.306.0594. S2CID 17306407.
- ^ 「APEX プロジェクト」。
- ^ 「APL コンパイラ (Jim Weigang から comp.lang.apl ニュースグループへのメッセージ)」。1994 年 4 月 5 日。
さらに読む
- APL マシン 2024-01-27 にWayback Machineでアーカイブ(1970 年フィリップ エイブラムスによるスタンフォード博士論文)
- APL の個人史 2023-11-07 にWayback Machineでアーカイブ (1982 年Michael S. Montalbanoによる記事)
- McIntyre, Donald B. ( 1991 ). 「知的ツールとしての言語: 象形文字から APL まで」(PDF)。IBM Systems Journal。30 ( 4): 554– 581。doi :10.1147/sj.304.0554。2006年 5 月 4 日のオリジナル(PDF)からアーカイブ。
- Iverson, Kenneth E. (1991). 「APL の個人的な見解」(PDF) . IBM Systems Journal . 30 (4): 582– 593. doi :10.1147/sj.304.0582. 2008 年 2 月 27 日のオリジナル(PDF)からアーカイブ。
- ケネス・E・アイバーソン著『プログラミング言語』
- ケネス・E・アイバーソンによるAPLの解説
- ブルックス、フレデリック P.、ケネス アイバーソン (1965)。自動データ処理、System/360版。ISBN 0-471-10605-4。
- Askoolum, Ajay (2006 年 8 月)。APL + Winによるシステム構築。Wiley。ISBN 978-0-470-03020-2。
- Falkoff, Adin D.; Iverson, Kenneth E .; Sussenguth, Edward H. ( 1964). 「System/360 の正式な説明」(PDF)。IBM Systems Journal。3 ( 2): 198– 261。doi :10.1147/sj.32.0198。2008 年 2月27 日のオリジナル(PDF)からアーカイブ。
- Wexelblat, Richard L 編 (1981)。「XIV」。プログラミング言語の歴史: プログラミング言語の歴史に関する会議の議事録、カリフォルニア州ロサンゼルス、1978 年 6 月 1 日から 3 日。Academic Press。ISBN 978-0127450407。
- バノン、ジェラルド・ジーン・フランシス (1989)。Bases da Computacao Grafica。リオデジャネイロ:キャンパス。 p. 141.
- LePage, Wilbur R. (1978)。応用 APL プログラミング。Prentice Hall。
- Mougin, Philippe; Ducasse, Stephane (2003 年 11 月). 「OOPAL: オブジェクト指向プログラミングへの配列プログラミングの統合」(PDF) . ACM SIGPLAN Notices . 38 (11): 65– 77. doi :10.1145/949343.949312. 2006 年 11 月 14 日のオリジナル(PDF)からアーカイブ。
- APL プログラマのためのオブジェクト指向プログラミング入門(PDF) 。Dyalog Limited。2006 年 9 月。2007 年 10 月 4 日のオリジナル(PDF)からアーカイブ。
- Shustek, Len (2012 年 10 月 10 日). 「APL プログラミング言語ソースコード」.コンピュータ歴史博物館(CHM). 2017 年 9 月 6 日時点のオリジナルよりアーカイブ。2017 年9 月 6 日閲覧。
- Svoboda, Antonín ; White, Donnamaie E. (2016) [2012, 1985, 1979-08-01]. Advanced Logical Circuit Design Techniques (PDF) (電子版再発行版を再入力). Garland STPM Press (初版) / WhitePubs Enterprises, Inc. (再発行). ISBN 978-0-8240-7014-4LCCN 78-31384。2017年4月14日時点のオリジナルよりアーカイブ(PDF )。2017年4月15日閲覧。[1] [2]
ビデオ
- YouTubeの「APL の起源」– APL のオリジナル開発者との 1974 年のトーク ショー形式のインタビュー。
- YouTubeでの APL デモ–インペリアル カレッジ ロンドンのBob Spence 教授による 1975 年の APL ライブデモ。
- YouTubeの APL での Conway のライフ ゲーム– Dyalog Ltd. の John Scholes による 2009 年のチュートリアルで、Conway のライフ ゲームを1 行の APL で実装しています。
- YouTubeの 50 年間の APL – Graeme Robertson による 2009 年の APL 紹介。
外部リンク
オンラインリソース
- オンライン APL 入門サイト TryAPL.org
- APL2C、APLコンパイラへのリンクのソース
