私は C、Fortran、Python、R、Matlab、およびいくつかの Lisp のバックグラウンドを持っており、Haskell についていくつか読んだことがあります。J や APL ファミリーの他の言語で、より一般的な言語では実装されていないユニークなアイデア/例は何ですか? 何が欠けているのかを見つけることに常に興味があります...
3 に答える
Jには非常に多くの演算子があり、ライブラリを探すことなく複雑なプログラムを簡単に作成できます。非常に強力な配列処理機能に加えて、明示的な制御構造をほとんどの目的に無関係にする反復構造を備えています。そのため、明示的なループを宣言するよりもテンソル代数を使用する方が便利です。Jはインタプリタで実行されますが、優れたJスクリプトは、コンパイラ言語で記述されたプログラムと同じくらい高速です。(明示的なループを取得する場合、インタープリターは実行するたびにループの内容をコンパイルする必要はありません。)
Jのもう1つの楽しい機能は、ポイントプログラミングです。入力変数を明示的に参照せずにスクリプトを作成できます。これにより、純粋に目的の観点からアイデアを表現できます。たとえば、次のように、平均関数を「リスト内の用語を合計し、それらをリスト内のエントリ数で割ったもの」として定義できます。
(+/ % #)
または、2D配列にスライスして、平均が10を超える行の平均のみを返すスクリプトを作成することもできます。
(10&<#])(+/%#)"1
Jでできることは他にもたくさんあります。これは、数学表記の実行可能な形式です。アイデアは簡単に一般化できるので、言語の仕組みの1つの側面を学ぶことで多くの利益を得ることができます。
J の最も興味深い側面の 1 つは、J がごく少数の非フォン ノイマン言語の 1 つであることです。
うーん。J主流?そうですね、他の非ノイマン言語と比較してそうです! そもそもノイマン以外の言語はごくわずかしかなく、そのほとんどは博士論文の中にのみ存在し、実際には実装されていません。一般に、ユーザーの少なくとも 1 人が発明者と同じフロアに座っていなければ、成功したと見なされます。
それに比べるとJが主流。特に、J は John Backus の独創的なチューリング賞講演「Can Programming be Liberated from the von Neumann Style?」の FP に基づいており、AFAIK で唯一有効な実装です。(たとえば、Backus が実際に FP を実装したことはないと思います。)
これはおそらく私が思っているほどユニークではありませんが、Jについて考えることができる最大の機能は暗黙のタイピングです。処理中のデータに焦点を当てるために、実行およびメモリ管理よりも優れた抽象化レベルを作成します。
番号を保存する必要があるとします。
var1 =: 10
そして、それは完了です。配列?
var2 =: 4 8 15 16 23 42
終わり。ああ、でも待って、それを3.7で割る必要がありますか?キャスティングを気にしないでください、ただそれのために行ってください:
var2 % 3.7
キャスト、操作、割り当ての必要性を取り除くことは、小さな祝福です。