2009-06-17 12 views
73

私はLispのいくつかの異なる方言があることを知っています。 Lispを学ぶことが新しい知的経験であると判断したので、どのLisp方言を学ぶべきか、そしてその理由を知りたい。どのLispの方言を学ぶべきですか?

他にも人気のあるものはありますか?それらのいずれかがより完全に文書化され、サポートされていますか?この方言の賛否両論は何ですか?

+1

重複:http://stackoverflow.com/questions/563356/which-lisp-should-i-learn –

+0

私はこれを尋ねる前にそれを検索しましたが、質問の性質は入力時に進化しました。私は車輪を再構築しないようにします。 –

+0

この質問と上記のグレッグとの違いは何ですか? –

答えて

21

私はこれまでに読んだことのある最も面白い、しかし非常に難しい書籍の一つであるLittle Schemerのために、Schemeとだけ言っています。

+13

SICPを忘れないでください! http://mitpress.mit.edu/sicp/。これは古典的な読書です。 –

+6

リトル・リスパー_の前に_リトル・リスパー_の2つまたは3つのエディションがありました。 –

5

私はオブジェクト指向プログラミングが好きで、CLOSは最も良いオブジェクトシステムです。

+5

CLについて言えば、私はClozureCLまたはSBCLのいずれかをお勧めします。どちらもオープンソースで、文書化されており、成熟したマルチプラットフォームであり、マルチスレッドのような重要な非標準機能を提供します。 –

4

私は学校でSchemeを学びました。素晴らしい学習体験だったので、関数型プログラミングの基本を忘れることはありません。有用性の中核であるステートレスラムダ計算(stateless lambda calculus)を理解している限り、どのバージョンのLISPを選ぶかは関係ありません。

入門プログラミングコースのWhy MIT switched from Scheme to Pythonに関する興味深い記事です。

8

また、最近のClojureは、正当な理由から、最近多くのマインドシェアを獲得しています。偉大なデータ構造、根本的に優れた並行性のサポート(この点でSchemeとCLを恥ずべきます)、そして素晴らしいコミュニティです。比較的簡単ですが、CLは少なくともC++ほど複雑です。

これはCLやSchemeを楽しめないと言っているわけではありません。私はSICPでSchemeを学びました。 CLは私をClojureに連れて来ました。それは皆私が想定しているあなたの目標に依存します。非常に実用的なLispを学びたいなら、Clojureに行ってください。さもなければCLまたはSchemeは両方とも素晴らしいです。

+0

これは実際には実用的であるが、CLやSchemeのどちらも「非常に実用的」ではないことを示唆しているようである。 特にCL基準は実用的な考慮事項から*生まれました。 – skypher

+2

プログラミング言語の状況は1994年以来変わりました。私はCL標準が、その時以来学んだことに対応するために、どのように変化/進化するのか分かりません。世界は先に揺らぎがあり、私がCLがまだ立っていることが分かります。私はCLが好きですが、Clojureはその力に近づくために何らかの方法を持っていますが、CLの進化の仕方はわかりません。標準化された言語を使用する場合、進化の道が明白でなければなりません。それがなければ、言語は実用的な選択ではないでしょう。 – dnolen

+3

CLは進化しており、非常に有用な多くのライブラリを通じて進化しています。基本言語は、今日の「現代」のすべての言語よりも、1994年にすでに強力でした。 – Svante

9

SBCLにCommon Lispをお勧めします。この組み合わせは、速く、強力で、成熟し、よく文書化されています。

2

私は、少なくとも最初はそれらのすべてを言っています。最終的にはおそらくSchemeやCommon Lispのための設定を開発するでしょうが、両者とも十分に違いがあり、そこにあるすべてのものを扱うのが最善です。

Schemeには、たとえばCommon Lispで実装することはできますが、Schemeのものについて学ぶのは良いことです。

レキシカルスコープとダイナミックスコープの違いを知ることは重要です.Commun Lispとelispの両方を学ぶと、両方の意味が明らかになります。

62

シンプルさとクリーンさ、魅力的な機能、興味深くて便利なソフトウェア(自分自身)を書くことができ、学習ツールとして機能するプラットフォームのバランスを探したいと思っています。 (これが最後、あなたが行くとたくさん長く学び続けます。)ここではいくつかの可能性があります:

  1. スキーム。恐らくすべての方言の中で最もクリーンです。これは間違いなくThe Little SchemerがLISPからSchemeに翻訳された理由です。第5のSchemeの標準仕様であるR5R2は、それ自体の素晴らしい教育です。それは私がこれまで読んだことのある最もすばらしい言語とライブラリの仕様であるかもしれません。 PLT Schemeプラットフォームには、まともなインタープリタとコンパイラが含まれており、スクリプト作成にも適しており、学習に優れた視覚的ツールもいくつか用意されています。

  2. Common Lisp。おそらくもっとも移植性が高く、包括的な変種ですが、これは商用ソフトウェアなどのものを作成したい場合には、おそらくあなたが望むものです。標準では広範なライブラリが定義されており、さらに多くのライブラリが利用できます。CLOSがあります.OO言語よりも多くのOOを教えてくれますし、コンパイラのいくつかはとても良いです。短所には、Schemeが持っていないいくつかの疣贅(機能を参照する変数に別の名前空間を持つなど)が含まれていますが、クリーンでシンプルではありません(拡張機能を必要とし、現実世界の大規模なアプリケーションでは)、衛生的なマクロを持たず、Schemeよりもはるかに少ない再帰を強調します。

  3. Clojure。これはJVM上で動作します。これはJava開発者のためのものです。これにはいくつかのいぼがあります(たとえば、TCOがJVMに追加されている場合はこれが変更される可能性がありますが、テールコールの最適化を明示的に求めなければなりません)。マクロは、衛生的ではありませんが、変数のキャプチャを避けるための機能を備えています。本当に必要な場合は変数をキャプチャできますが、誤ってCLを使用するリスクが少なくなります。すべてのJavaライブラリに簡単にアクセスできます。それはおそらく "実世界"のコードにとっては良いことであり、学習に関してはかなり無意味です。それは永続的なデータ構造とSTMのサポートのためのライブラリのセットを持っています、それは同時の観点から非常に興味深いものです;並行プログラミングと並列プログラミングを扱う新しい方法についてもっと学ぶことに興味があるなら、これはおそらくあなたの最善の賭けになります。まるでClojureが、Javaのような大規模なプロダクションアプリケーションにも使えるかのように見えます。それは、あなたがやりたいとやらないプロダクションアプリで行う「醜いもの」を実行する能力を持つという意味ですあなたが学んでいるとき。

  4. Emacs Lisp。 LISPの点では、これは良い例の一つではありません。最大の不具合の1つは動的スコープですが、他にも多数あります。しかし、あなたがEmacsのユーザであれば、これはエディタの使い方を改善するために学ぶことができる最も強力なツールかもしれません。 Emacsを拡張する方法を超えて、Emacs Lispを学ぶことからどれくらいのことを本当に学ぶことができるかは、私にとってはオープンな質問です。 Emacs Lispで高次関数などの興味深いテクニックが実際にどれくらい頻繁に使われているか分かりません。

+3

別々の名前空間を持つことは疣贅ではなく、異なる設計上の決定に過ぎません。 Schemeには既にいくつかの名前空間があるので、Lisp-6に対する議論はむしろLisp-5です。 CLでリスト "list"とcar "car"を呼び出すことができるという利便性とは別に、そのマクロシステムはコンパイラが非常に簡単に混乱させるものではないので、はるかに実用的で便利です。 – Svante

+0

Clojureにはテールコールの最適化機能はありません.JVMバイトコードではサポートされていないため、Clojureにはテールコールの最適化機能はありません。それが持っているのは、現在の機能を自己再帰的に繰り返す「繰り返し」特殊形式です。 – Svante

+0

Svante:TCOコメントをいただきありがとうございます。 JVMがTCOサポートを追加した場合、「再帰」を使用する必要性がなくなるかもしれないというメモを記事に追加しました。 –

0

LFE(Lisp Flavored Erlang)がいいでしょう。 Erlang VMの上にlisp構文を書くことができます。

0

「ロードされた」質問は始まりましたが、OPはおそらくそれについて知らなかったでしょう。一般的に、コモンとスキームのリディスパーは、PCとアップルのコンピュータの "人"のようなものです。どちらが最善ののかは、どちらがあなたのために「働く」ほど関連していない可能性があります。本当に、それほど大きな違いはありません。他のものよりも優先される可能性があります。 (私には、空リストはCLでNILと知られている "何もない"でなければなりません)、EMACSを使ってSBCLとSlimeを統合するのが好きですが、SBCLは誰にとっても同じではありません。一つ目は、SBCLは非常に厳しいです。単に "楽しく"したいのであれば、GNU clispはほとんどのプラットフォームで簡単に利用できます。

関連する問題