72

どの Lisp (方言) を学ぶべきですか? その理由は?

CL と Scheme の間の断片化は、(少なくとも私にとっては!) 理解を遅らせます。

では、「本当の答え」を教えてください!

私は機能の比較を読み込もうとしましたが、方言が完全に末尾再帰的であるかどうかなどのように、難解な (完全には理解していません) ことに行き詰まっているようです。みなさんが(まとめて)不透明な違いを明確にしてくれることを願っています。

好きなもの

優れたライブラリ サポート、優れた環境、および Unicode サポート。

嫌いなもの

フレイムウォーズ。最初は役に立ちますが、長期的な学習に支障をきたす機能。


アップデート

  1. 私は主に MzScheme を使用してきましたが、readline のサポートが開始されてからは、問題なく楽しんでいます。私は Unix で GUI を実行していないので、これは私にとって優れた環境オプションのように思えました。

  2. また、Clojure の .deb パッケージを debian に簡単にインストールできることも非常に嬉しく思います。これは大きな勝利です。下のかなり怒りやすい敵意にもかかわらず、参入障壁が低いことが勝利です. 私はスプーンで与えられるのが好きです。

  3. SICPをたくさん読んだ後、末尾再帰に関する問題をよりよく理解できました。

4

17 に答える 17

64

Clojureは積極的に開発された最新の Lisp の方言です。これは JVM に基づいているため、すべての Java ライブラリがすぐに利用可能になり、Unicode もサポートされます。

これは 1 つの選択肢であり、唯一の正解ではありません。

于 2009-02-18T23:59:05.773 に答える
34

炎上戦争を避け、ライブラリを楽しみたい場合は、Clojure を使用してください。小さく、高速で、コミュニティは役に立ち、独断的ではありません。それは Lisp から 1980 年代のばかげたクラフトを引いたものです。これには BDFL があり、良いアイデアがあれば、言語に実装される可能性が非常に高くなります。

私は Common Lisp をいじってみましたが、これは素晴らしいことです。DrScheme で最初の 3 つの章と SICP の Metacircular Evaluator を完了しました。これも素晴らしいことです。もちろん、これらを学ぶことで大きな恩恵を受けることができます。

しかし、時間が経つにつれて、私は小さな言語を心から愛するようになりました。私は嘘をつきません、私はJavascriptが大好きで、Cが大好きです(そして、すべての言語がCコアを中心に持っていない場合は、なんてこった)それらは小さいからです。

Clojureは小さいです。エレガントです。それは私たちの時代の言語です。

于 2009-02-19T05:17:06.400 に答える
22

1つ選んで、それを学びましょう。最初に間違った選択をしたとしても、違いを理解する頃には、もう一度選択できるようになります。

于 2009-02-18T23:36:17.840 に答える
19

Clojureは、関数型プログラミングを促進するLISPの優れた方言です。これはJVM上で実行されるため、使用に慣れている可能性のあるJavaライブラリにアクセスできます。このサイトには、学習に役立つ優れたドキュメントとスクリーンキャストがあります。もう1つの利点は、他の多くの方言とは異なり、インストールが非常に簡単なことです。

概念を理解しようとしているだけなら、Emacs(具体的にはEmacsLISP)は別の選択肢です。信じられないほどのドキュメント、チュートリアル、そしてたくさんのコードサンプルが付属しています。スクリーンキャストもかなり簡単に見つけることができます。Emacsの大きな利点の1つは、エディターがLISPで記述されているため、エディターがLISPの実行、編集、およびデバッグを非常によくサポートしていることです。さらに、エディタを拡張して、 LISPを学習している間、毎日のテキスト編集のニーズを簡単にすることができます。

于 2009-02-20T03:49:21.640 に答える
19

CommonLispの利点であるContraChuckは、実装が固執して努力する標準を備えているため、主にSBCL(優れた型チェックと推論を備えています)を使用して開発し、たとえば、 Cライブラリ(ECLなどを使用)またはJavaライブラリを使用する.jar(ABCLを使用)、またはMacまたはWindowsネイティブGUI(Clozure、両方)。Common Lispは、アーキテクチャ間、実装間、および時間の経過とともに驚くほど移植性があり、Common Lispersは、言語のサポートを受けて、このように物事を維持するよう努めています。例として、標準化されていない動作の1つのばかげた相違は、「これは特別な変数ですか?」という質問です。だから私は私が使用する実装全体でそれに答えました:

#-abcl
(defun special-variable-p (symbol)
  #+ecl(si:specialp symbol)
  #+ccl(proclaimed-special-p symbol)
  #+sbcl(equal '(:special t)
               (multiple-value-list-int:info :variable :kind symbol)))

これは、読み取り時に、ABCL(すでにこれを持っています)、(defun special-variable-p (symbol) (si:specialp symbol))ECLなどで何も削減しません。したがって、これを.rcファイルに入れて、REPLで共通関数を使用できます。ただし、これはそれほど重要ではありません。これは、スレッド化やさまざまなバックネットワーク、またはCommunicatingSequentialProcessesライブラリではありません。この最後の例には#+sbcl/#-sbcl、5つの実装で実行されている場合でも、1つしかありません。慎重に移植されたコードに依存しているためです。

しかし、この(および他の)利点を可能にするものは、学習者に独自の課題をもたらします。CommonLispは非常に大きな言語です。私がClojureをやったように、それは1、2週間で丸呑みできるものではありません(しかし、私のClojureは、展開するように設定された重大な変更ですでに衰退しています-その言語は、それ自体のメリットがありますが、 Common Lispについて私が気に入っていることはたくさんあります。)したがって、このページをたくさん読んで、HyperSpecをキーを押したままにして(私にとってM-x hyperspec RET do-symbols RETは、聖書に十分近い)、数冊の本を購入することを検討する必要があります。私はPracticalCommonLispを持っていて、 Let Over Lambdaを入手したばかりで、すぐにPAIPを購入する予定です。

しかし、Common Lispが真の答えであるとしても、一見派手な代替案を「選ぶだけ」で時間を完全に無駄にすることはありません(-「欺瞞的」なのは、ありふれたCLは、そのマクロが実行できるすべてのことを示していないからです。誰よりも多くの種類のマクロがあります。通常の比較は、不正なCLと構文が最適化された代替X)の間です。あなたはまだ基本を学び、SICP、On Lisp、The LittleSchemerなどで読むことができるものの多くをまだ使うことができます。Lispは、間違ったLispでさえ、非Lispよりも優れています。(しかし、あなたは正しいLispの一部を、不十分に、間違ったLispに実装することにあなたの時間のいくらかを費やすでしょう。Meta-Greenspun。)

于 2009-02-19T01:43:37.100 に答える
9

Lisp の最大の問題は、誰もが固執する最優先の標準がないことです。Common Lisp と Scheme のどちらかを選択する必要はありません。互換性のない Common Lisp の実装と、Scheme の互換性のない実装、さらには Arc や Clojure のようなその他の小さなものの中から選択する必要があります。

MzSchemeから始めることをお勧めします。それは人気があり、活発に開発されており、最新のプログラミング環境の機能を提供する多くのライブラリがあり、Scheme は Common Lisp よりもいくらか単純です (より良いとは言えませんが、単に単純です)。

于 2009-02-19T00:20:09.313 に答える
7

Emacsを拡張できるようにelispを学びましょう。

于 2009-02-19T01:45:13.337 に答える
6

Clojure を使用します。これは、あらゆる Java ライブラリに完全にアクセスできる素晴らしい言語です。開発は 2 年強で、すでに 3 つの IDE プラグインが開発中で、4 月にはそれに関する本が出版されています。それは非常に速く、非常にエレガントで美しいです。Clojure を使えば間違いはありません。

于 2009-02-20T12:28:08.603 に答える
5

私にとっては、Scheme の基本理論の方がはるかに説得力があります。PLTScheme (現在は Racket と呼ばれています) は、私が見つけた中で最も活発に開発されている LISP です。残念なことに、Lisp の美しさを覆い隠す型付けの急増があります。

arc のようなものが成功するのを見たいと思っていますが、それはありそうにありません。

于 2009-02-19T00:14:17.733 に答える
4

推測:最初のLispを学習するときは、最終的に開発に使用するLispを学習しないでください。

補題:アークを学ぶ。クロージャ、マクロ、継続など、Lispの「理解しにくい」ものすべてであり、ClojureのJava相互運用の複雑さ、CLの名前空間の混乱、Schemeの名前の断片化はありません。あなたが献身的であるならば、あなたは週末にこれらすべてのことを学ぶことができます。あなたが鋭くて献身的であるなら、夜に。

そして、他のすべてのLispの学習がはるかに簡単になります。

于 2009-02-20T02:49:07.247 に答える
4

IronSchemeを見てください。

于 2009-02-19T00:27:46.453 に答える
4

私は Lisp を知りませんが、PLT スキーム (現在は Racket と呼ばれています) が良い選択だと思う理由は次のとおりです。

  1. 本当に良いドキュメント
    http://download.plt-scheme.org/doc/html/

  2. DrScheme
    DrScheme は、コンパイラ、ステッパー、構文チェッカー、REPL、無数の言語サポートを備え、拡張可能な素晴らしいプログラミング環境です。これにより、体験全体が楽しくなります。いくつかのスクリーンショットを見る

  3. コミュニティからの優れたサポート。
    コミュニティは彼らの言語に非常に熱心で、非常に協力的です。ご不明な点がございましたら、メーリング リスト、グループ、フォーラムをご利用いただけます。著者でさえ非常にアクセスしやすいです。

  4. 継続的な研究
    PLT は非常に活発で、ツールの改良を続けています。ラボから多くのイノベーションが期待できます。例えば。これを使用することにかなり興奮しています:http://blog.plt-scheme.org/2009/05/typed-scheme-20.html

  5. 始めるための無料の書籍と興味深いチュートリアル。
    http://www.htdp.org/
    http://world.cs.brown.edu/

  6. 優れたモジュールと豊富なライブラリ。
    http://www.cs.utah.edu/plt/develop/
    http://planet.plt-scheme.org/ドキュメント も参照

もしあなたがSchemeを学んでいるなら、DrSchemeを試してみてください。

于 2009-05-31T03:49:47.997 に答える
3

ほら... Lispに興味を持ったとき、私も選択しなければならないと思いました。そして、いろいろ読んだり質問したりした結果、Common Lisp を選ぶことになりました。絶対的な意味でSchemeよりも「優れている」からではなく、プロジェクトで今後2〜3年使用すると思われる機能を備えていたからです。

  • 数値計算用の非常に効率的なコンパイラ (SBCL)、
  • 条件システム、そして...
  • SLIME もこの決定に重要な役割を果たしたことを認めざるを得ません。:-)

もし私があなただったら、それぞれの言語を少しずつ学び始め、それぞれの相対的な長所と短所を見つけます (つまり、あなたが最も頻繁に必要とする/したいことに関連するものです)。あなたは私が選ぶことができます。もう一方も後から学ぶことになるかもしれません (私に起こったことです -- Common Lisp を 1 年間勉強した後、Scheme をもっと学ばなければなりませんでした)。

Arc、Clojure、Lushについては、それらを知りません。同じ議論がそれらにも当てはまると思います... 私がそれらにあまり投資したくなかった理由は、次のとおりです: Arc は数値計算には興味がないようで、P. Graham はコードサイズに取りつかれているようです (彼のコードを読めなくするポイント); Clojure は良さそうですが、JVM は好きではありません。そして Lush... ええと、動的スコープを使用する以外に、言語のコンパイル バージョンと解釈バージョンは大きく異なります。また、再帰関数をコンパイルすることはできません。だから、それは私にとってSchemeかCommon Lispのどちらかでした。

于 2009-05-31T03:19:38.647 に答える
1

Clojure以外のものを選び、それを使用すると、後で評価するのに適した位置になります。

あなたはこの質問を、どのLispがLispを学ぶのに最適な媒体であるか、そして私にとっては低レベルのプリミティブから構築されたLispを含まなければならないが、Clojureの大部分はJavaで書かれていると言いました。

この質問を、新しいプロジェクトを開始するのに最適なLispであると表現した場合は、Clojureが最適な選択かもしれません。

于 2009-07-14T22:13:59.420 に答える
1

Common Lisp か PLT スキーム (現在は Racket と呼ばれています) のどちらかが必要だと思います。

前者には多くの自由とパワーがあり (最初は圧倒されるかもしれません)、後者には多数のライブラリ、一致するチュートリアル、および適切に統合された IDE が付属しています。

于 2009-02-19T10:50:52.383 に答える
0

私はSchemeのファンですが、Schemeで何かをしてから10年以上になります。

他の人が言ったように-ただ1つを選んで行きます。

于 2009-02-20T03:53:59.743 に答える
0

SBCL、Clojure、PLTScheme のいずれかの実際の選択肢はほとんどありません。

于 2009-02-20T10:03:27.657 に答える