web-dev-qa-db-ja.com

どのLISPを学ぶべきですか?

私はどのLISP(方言)を学ぶべきですか、そしてなぜですか?

CLとSchemeの間の断片化は、取り込みを遅くします(少なくとも私にとっては!)。

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

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

好きな物

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

嫌いなこと

フレームウォーズ。最初は役立つが、長期的な学習を妨げる機能。


アップデート

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

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

  3. [〜#〜] sicp [〜#〜] の詳細を読んだ後、末尾再帰に関する問題をよりよく理解できました。

69
Gregg Lind

Clojure は、活発に開発されているLISPの現代方言です。これはJVMに基づいているため、すべてのJavaライブラリがすぐに利用可能であり、したがってUnicodeもサポートしています。

これは1つの選択肢であり、真の答えではありません。

62
Greg Hewgill

フレームウォーズを避けてライブラリを楽しむ場合は、Clojureを使用してください。それは小さく、高速で、コミュニティは親切で独断的ではありません。それはLISPから1980年代の不条理な残骸を差し引いたものです。 BDFLがあり、良いアイデアがあれば、言語に実装される可能性が非常に高くなります。

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

しかし、時が経つにつれ、小さな言語を心に抱くようになりました。私はうそをつくことはありません。Javascriptが好きで、Cが好きです(すべての言語の中心にCコアがない場合はおかしいです)。

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

31
dnolen

Clojure は、関数型プログラミングを促進するLISPの優れた方言です。これはJVM上で実行されるので、慣れているJavaライブラリにアクセスできます。このサイトには、すばらしいドキュメントと スクリーンキャスト があり、学習に役立ちます。別の利点他の多くの方言とは異なり、インストールは本当に簡単です。

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

19
Bryan Kyle

1つだけ選んで、それを学んでください。あなたが違いを理解するまでに、あなたが最初にひどく選択した場合、あなたは再び選択する立場になります。

18
Gregg Lind

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

#-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で共通の関数を使用できます。しかし、これはそれほど重要ではありません。これは threading または varilyly-backed networking または Communicating Sequential Processes library ではありません。この最後の例には、1つの#+sbcl/#-sbcl 5つの実装で実行されている場合でも。慎重に移植されたコードに依存しているためです。

しかし、この(および他の)利点を可能にするものも、学習者に独自の課題をもたらします。CommonLISPは非常に大きな言語です。それは、私がClojureをしたように、1〜2週間でスラップすることができるものではありません(ただし、私のClojureは、展開する予定の重大な変更によりすでに衰退しています-その言語は、独自のメリットを備えていますが、対照的に私に思い出させましたCommon LISPについて私が気に入っていることはたくさんあります。) このページ をたくさん読んで、HyperSpecをキー操作しないでください(私にとっては、M-x hyperspec RET do-symbols RETは、聖書への十分な近さです。私は Practical Common LISP を入手しました Let Over Lambda を取得しました [〜#〜] paip [〜#〜] もうすぐ購入します。

しかし、Common LISPがTrue Answerであったとしても、一見派手な派手な代替品を「選ぶだけ」で時間を完全に無駄にすることはありません(-'欺瞞的'Commonplace CLは、そのマクロが実行できるすべてのことを示しているわけではなく、誰よりも多くの マクロの種類 を持っています。通常の比較は、不適切なCLと構文最適化された代替Xとの間です)。あなたはまだ基本を学びます、あなたはまだあなたがSICPで読むことができるものの多くを使うことができます、LISPで、 The Little Schemer など。非LISP。 (しかし、適切なLISPの一部を実装するのに時間を費やし、不適切なLISPで不適切なLISPを使用します。メタグリーンスパン)。

18
ayrnieu

LISPの最大の問題は、誰もが固守している上書き標準がないということです。 Common LISPとSchemeの間で選択する必要はありません。 Common LISPのいくつかの互換性のない実装と、Schemeのいくつかの互換性のない実装、およびArcやClojureなどの他の小さなものから選択する必要があります。

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

9
Chuck

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

7
mletterle

Clojureを使用してください。これは驚くべき言語であり、Javaライブラリに完全にアクセスできます。2年以上も開発されており、すでに3 IDEプラグインが開発されています。それについては4月に出版される本です。それは非常に速く、非常にエレガントで美しいです。Clojureで間違いはありません。

6
Rayne

私にとって、Schemeの基礎理論ははるかに説得力があります。 PLTSchemeは、私が見つけた最も積極的に開発されたLISPです。残念ながら、LISPの美しさを曖昧にするタイピングが急増しています。

Arcのようなものが成功するのを見たいのですが、そうは思われません。

5
Javier

IronScheme を見てください。

4

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

補題:弧を学ぶ。これは、LISPのすべての「難しい」問題です。クロージャー、マクロ、継続、ClojureのJava相互運用の複雑さ、CLの名前空間の混乱、Schemeの名前の断片化はありません。専用の場合、あなたは週末にこれらすべてのことを学ぶことができます。

そして、それは他のすべてのリップスをlotを学ぶことをより簡単にします。

4
Andrey Fedorov

私はLISPを知りませんが、PLTスキームが良い選択であると私が思う理由はここにあります:

  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/ も参照 docs

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

4
unj2

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

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

だから私があなただったら、私はそれぞれの言語のほんの少しを学び始めて、それぞれの強みと弱み相対的が何であるかを見つけます(つまり、あなたが必要とするものに関連するもの/最も頻繁にやりたい)ので、あなたは私が選ぶことができます。もう一方も後で学ぶことになるかもしれません(私にとっては幸いです。CommonLISPを1年間勉強した後、Schemeをもっと学ぶ必要がありました)。

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

3
Jay

Common LISPまたはPLTスキームのどちらかが必要だと思います。

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

1

Clojure以外のものを選択し、それを使用してください。そうすれば、後で評価するのに適した位置になります。

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

新しいプロジェクトを始めるのに最適なLISPであるとこの質問を述べた場合、Clojureが最良の選択かもしれません。

1
Kevin Peterson

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

0
Marko

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

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

0
Tim