web-dev-qa-db-ja.com

APL対A対J対K?

配列言語の風景は、魅力的ではありますが、紛らわしくありません。 J、K、APL、Aのいずれかを選択する理由はありますか?これらのオプションはどれもオープンソースではないようです-オープンソースのバージョンはありますか?私は心を広げたいと思いますが、戸惑い続けています。

74
fogus

これらの言語の違いは比較的微妙です。 APLの「適切な」には、元の記号表記の利点と欠点があります。 (長年にわたってシンボルセットに小さな変更が加えられていますが、それらはすべて元のビジョンに十分に忠実です。)

A +言語はオープンソースで利用できます。 「クラシック」APLから大幅に逸脱していますが、コア文字セットのほとんどを維持する点でAPLに似ています。私の感覚では、テクノロジーの変化に伴って最新の状態に保たれていません。 Kの前身でした。

特有のAPL文字セットから逸脱した配列言語ファミリの言語には、J、K、およびNialがあります。 Nialは、記号の代わりに英語の単語を使用し、Q'Nialと呼ばれるオープンソースのインタープリターを持っています。 KとJは主に記号に依存していますが、これらはASCII文字セットから描画されます。ただし、定義を割り当てるだけで、これらの言語では記号の代わりに単語を使用できます。

プログラミング言語のAPLファミリーは、1964年にIBM製品としてAPLが最初に登場して以来、主に独占的でした。独自の配列言語は、現時点では、オープンソースの代替手段よりも多くのサポートと新しい機能の進化を持っているようです。すべての競合他社がどのように対抗するかはわかりませんが、Dyalog APLは確かに、現在のテクノロジーとしての言語の実装を促進するために積極的に取り組んでいます。 APL2000は、VisualAPL for .Netを含む、Unix、Linux、およびWindows用の製品を提供しています。 MicroAPL LtdはAPLXを提供しています。

Kは、独自に販売されなくなった特殊な言語です。 Kx Systemsは代わりに、Kdb +データベースとそのQ(クエリ)言語をマーケティングしています。これらは両方ともKで書かれています。これは、ストリーミングデータの高速処理用に設計された強力な専用ツールです。これは、元のAPLアプローチとは大きく異なります。 Kx Systems製品は高価であり、ユーザーは主に財務部門で働いています。

APLはKen Iversonによって構想され、主に設計されました。商用アプリケーションでのAPLの適用と改良の完全な経歴の後、彼は「合理化された」改訂を作成するタスクに目を向けました。これは、長年にわたって自分自身に不満を感じていた言語の側面を修正したものです。このテーマの新鮮なテイクはJと呼ばれます。JとAPLの違いは、J Software wikiのペーパーにスケッチされています。顕著な変更点の1つは、配列のインデックス構文の削除です。ただし、最大の特徴は暗黙の形式であり、プログラムは引数を参照せずに関数を作成して作成されます。 Tacit Jは、関数型プログラミング言語に見られる「ポイントフリー」スタイルと密接に関連していますが、この形式がJ言語の基本であるという点で異なります。 Jで使用されるASCIIベースの記号は、より特徴的なAPL文字よりも読みにくい場合があります。

配列言語を学びたい個人のために、私のアドバイスは、Dyalog APL、APLX、J、およびQ'Nialから選択することです。 Dyalog APL(esp。for Windows)またはAPLX(esp。for Linux)は、APLの特徴であるコアシンボリズムを使用したい場合、および全体としてAPLコミュニティとの強いつながりを望んでいる場合に最適です。 Jは、Webアプリケーションを構築したい、または数学(プロジェクトオイラーのような)に焦点を当てたい人、特にそれが強調する暗黙のスタイルに魅了されている人に最適です。 Q'Nialは、優先度がオープンソースである場合に選択しますが、その優先度がアクティブなOSコミュニティのサポートを期待することを意味しない場合に限ります。


更新:J 7.01はGPL 3の下で オープンソースコードでリリース になりました。さらに、Kのバリアント Kona があります。これらは、オープンソース配列言語のオプションを増やします。

トビアによる更新: GNU APL はGPLの下で利用可能です。これは、Extended APL言語で公開されている最新のISO標準に厳密に従っています。これは優れたオープンソースのAPL実装であり、積極的に開発および保守されています。他にも興味深い実装があります。たとえば、 ngn APL は、Coffeescript(Javascriptにコンパイルされます)で記述された驚くほど機能が豊富で最新のAPLの実装です。配列言語は2015年に健在です。

120
kaleidic

さらに情報を追加するには...

Kと呼ばれるKonaのオープンソースバージョンがあります https://github.com/kevinlawler/kona

ために q/kdb+、試用版があります。 http://kx.com/download/

主な制限は、2時間のタイムアウト、32ビットのメモリ、3か月のライセンスの有効期限、およびライセンス自体です。あなたがただ遊んで何かを学びたいだけなら、これらはそれほど面倒ではないはずです。

個人的には、KXがモナディック(単一引数)動詞をqから英語の単語に翻訳し、十分な量のドキュメントがあるため、Kが最もユーザーフレンドリーであることがわかりました@ http://code.kx.com =。さらに、データベースシステムは非常によく考えられており、柔軟性があります。

11
Yike Lu

考慮すべきことは、演算子(高階関数)の語彙です。

元のAPLには、最後と最初の軸削減(f/f⌿)、最後と最初の軸の累積削減(f\f⍀)、さらに内積と外積(f.g∘.g)。

ほとんどの拡張APL(GNU APL、APLX、APL + Win、APL2)など)は、各ループ()、および軸ブラケットの仕様(f[...])。

J、 plethora (副詞と結合詞と呼ばれる)を追加しましたが、角かっこ(軸とインデックスの両方)、各演算子(より一般的なランク演算子を優先)、および最後の軸(累積)を削除しました削減。

廃止されたSharp APL(SAX)は、従来の最終軸演算子とブラケットインデックスの両方を保持し、Jの新しい演算子の多くを追加しました。

Dyalog APLは徐々にSharp APLの語彙に近づきつつありますが、Sharp APLに組み込まれなかったJ限定演算子も組み込んでいます。

以下の表は、J、Sharp APL、およびDyalog APLの構成語彙を比較しています。グレー表示のエントリは提案中です。 J, Sharp APL, and Dyalog APL compositions

7
Adám

Jは、ASCII文字を使用して入力および表示される実行可能数学表記です。

また、本格的な関数型、オブジェクト指向、プログラミング言語でもあります。

JのJSoftware実装(他には知りません)はオープンソースではありませんが、自由に使用できます。

エンジンはオープンソースではありませんが、人々が貢献できるJコードのアクティブなユーザーライブラリがあります。

Jは、広範囲で簡潔なドキュメント http://www.jsoftware.com/help.htm を持ち、フォーラムのメンバーは質問や問題に喜んで迅速に対応し、新しいユーザーの志向を深める手助けをしたいと考えています。より高度な問題があります。

ちなみに、オープンソースの問題については、Jのドキュメント(仕様)は広範であり、理論的には誰でもオープンソースプロジェクトを作成して、必要に応じてJの実装を試みることができます。

3
Matthew Brand

[〜#〜] eli [〜#〜] は、新しく開発された、自由に利用できるクロスプラットフォームの配列プログラミング言語です。 Jおよびkと同様に、ASCII文字セットに依存します。一時的なデータ型や組み込みのSQLサブセットなど、(私が知っているように)k/q/kdb +に固有の機能の一部を実装します。

2
Roman Mishin

A +は(悲しいことに)死んだプロジェクトのようですが、新しいオープンソースのAPLインタープリター GNU APL があります。

1
Brad Ackerman

私も困惑したままです(APLは常に私を困惑させました-幸い、私が最後に何かを試みてから20年以上経ちます)少し検索すると、AのオープンソースバージョンであるA +が見つかりました:

それがあなた(または誰か)のニーズを満たすかどうかはわかりません。

0
Michael Burr