9

私は Lisp の方言を扱っていましたが、Haskell もいくつか学んでいました。それらにはいくつかの類似点がありますが、Common Lisp での主な違いは、関数や引数などごとに型を定義する必要がないことです。Haskell ではそうします。また、Haskell はほとんどがコンパイル済み言語です。コンパイラを実行して実行可能ファイルを生成します。

私の質問は、Haskell のような言語が Common Lisp のようなより動的な言語よりも理にかなっているような別のアプリケーションや用途はありますか? たとえば、Lisp は Web サイトや GUI の構築など、より下位のプログラミングに使用できるようです。Haskell は、TCP/IP サーバーやコード パーサーの構築など、コンパイル時のチェックが必要な場合に使用できます。

人気のある Lisp アプリケーション: Emacs

人気の Haskell アプリケーション: PUGS Darcs

同意しますか、これに関する研究はありますか?

4

5 に答える 5

14

プログラミング言語は、考えるためのツールです。十分に努力する気さえあれば、どんなプログラムでもどんな言語でも表現できます。あるプログラミング言語が他のプログラミング言語よりも提供する主な価値は、さまざまな方法で問題を考える際にどれだけのサポートを提供してくれるかということです。

たとえば、Haskell は、問題を型の観点から考えることに重点を置いた言語です。問題を Haskell のデータ型で表現する便利な方法があれば、それがプログラムを書くのに便利な言語であることがわかるでしょう。

Common Lisp の強み (多数あります) は、その動的な性質とホモイコニシティにあります (つまり、Lisp プログラムは、Lisp データとして表現および操作するのが非常に簡単です)。Lisp は「プログラム可能なプログラミング言語」です。たとえば、あなたのプログラムが新しいドメイン固有言語で最も簡単に表現できる場合、Lisp はそれを非常に簡単に行うことができます。Lisp (およびその他の動的言語) は、問題の説明がデータ型の指定が不十分であったり、開発の進行に伴って変化する可能性があるデータを扱っている場合に適しています。

言語の選択は、多くの場合、何よりも審美的な決定です。プロジェクトの要件によって、互換性、依存関係、またはパフォーマンス上の理由から特定の言語に制限されない場合は、最適だと感じる言語を選択することもできます。

于 2009-01-28T04:54:46.890 に答える
5

あなたは非常にうごめくワームの缶を複数開けています。まず、強く型付けされた言語と弱く型付けされた言語全体が可能です。第二に、関数型言語と命令型言語は可能です。

(実際、私は興味があります。「lisp 方言」とは、ひょっとして Clojure のことを指しているのでしょうか? それは大部分が機能的で、ある意味で Haskell に近いからです。)

そして。まず、ほぼすべてのプログラムを、ほぼすべての通常の言語で、多かれ少なかれ労力をかけて書くことができます。強い型付けの利点は、コンパイル時に大規模なクラスのエラーを検出できることです。一方、型の少ない言語はコーディングが容易です。Common Lisp が興味深いのは、より強力な型を宣言して使用するオプションを備えた動的言語であり、CL コンパイラに最適化の方法に関するヒントを与えるからです。(ああ、実際の Common Lisp は通常、コンパイラで実装されており、コンパイルするか、解釈されたコードに固執するかを選択できます。)

型付けされていない言語、弱く型付けされた言語、および強く型付けされた言語の比較に関する研究は多数あります。これらの研究では、どちらか一方が優れているか、観察可能な違いはないと常に述べています。しかし、研究間での合意はほとんどありません。

明らかな利点がある可能性のある最大の領域は、数学の問題の複雑な仕様を扱うことです。そのような場合 (暗号化アルゴリズムは一例です)、Haskell のような関数型言語は、Haskell コードと基礎となるアルゴリズムとの間の対応を簡単に検証できるため、利点があります。

于 2009-01-28T03:31:19.257 に答える
4

私は主に Common Lisp の観点から来ています。私が見る限り、Common Lisp はあらゆるアプリケーションに適しています。

はい、デフォルトは動的型付け (つまり、実行時の型検出) ですが、最適化のために型を宣言することもできます (他の読者への補足として: CL は厳密に型付けされています。弱い/強いと静的/動的を混同しないでください!) .

Haskell は、コンパイル時に少なくともすべての型チェックを強制するため、アビオニクス セクターの Ada の代替として、もう少し適していると想像できます。

CL が TCP/IP サーバーやコード パーサーにとって Haskell ほど有用ではないことはわかりませんが、むしろその逆ですが、Haskell との接触はこれまでのところ簡単です。

于 2009-01-28T04:33:08.727 に答える
3

Haskell は純粋な関数型言語です。(モナドを使用して) 命令型の構造を使用することはできますが、通常、プログラマーは、より数学的なアプローチを使用して、かなり異なる方法で問題を考える必要があります。たとえば、別の値を変数に再割り当てすることはできません。

これにより、ある種の間違いを犯す可能性が減ると主張されています。さらに、Haskell で書かれたプログラムは、典型的なプログラミング言語で書かれたものよりも短く簡潔になる傾向があります。Haskell は非厳密な遅延評価も多用します。これにより、理論的には、コンパイラーは他の方法では不可能な最適化を行うことができます (副作用のないパラダイムと共に)。

あなたがそれについて尋ねたので、Haskell の型付けシステムは非常に優れていて便利だと思います。一般的なエラーをキャッチするだけでなく、コードをより簡潔にし (!)、一般的な OO 言語のオブジェクト指向構造を効果的に置き換えることができます。

GHC などの Haskell 開発キットの中には、インタラクティブな環境を備えているものもあります。

于 2009-01-28T09:55:27.873 に答える