LISPは今日の世界でまだ有用ですか?どのバージョンが最も使用されていますか?


117

私は自分自身に新しいプログラミング言語を定期的に教えようとしています。最近、私はLispとその方言がC / C ++のような言語とはまったく反対の立場にあることを読みました。ただし、2つのことは私には不明確であり、それらに関するガイダンスを探しています。

  1. LISPは今日でもまだ実践/使用されていますか、それともFORTRAN / COBOLなどのレガシー言語ですか?つまり、既存のコードを維持することとは別に、新しいプロジェクトでまったく使用されますか?

  2. 最も広く使用されている方言は何ですか?最も一般的な2つの方言としてSchemeとCommon Lispに出会いましたが、どちらが最も好まれ/有用な方言であるかについてのあなたの意見が欲しかったです-そして、あなたが最初のランク初心者のためのリソースを提案できるなら、非常に満足します。

私が慣れ親しんでいる手続き言語とは根本的に異なる言語を習得したいのですが、もし完全に時代遅れであれば何かに過度の労力を費やしたくはありません。しかし、学術的観点からのみ...


10
この質問にとても興味があります。時間があれば、Lispの学習に力を入れることにします。そして、あなたがここで質問しているのと同じ種類の質問と不確実性に邪魔されるたびに。どのバージョンのLispを学ぶべきですか?(Paul Graham以外の)誰かが本当にLispを使用していますか?Lisp、またはHaskellのような新しい関数型プログラミング言語の1つを学ぶべきですか?スキームなどに対するLispの利点など
Channel72



「まだ」?(私は冗談!)
jhocking

SOでこの他の関連するスレッドを見つけました:stackoverflow.com/q/1614724/212942
TCSGrad

回答:


59

私はSchemeが好きです。JVMで作業したい場合は、Clojureをチェックしてください。ClojureはJVMで動作するように設計されたLispです。そして、もちろん、Lispはそのような最小限の設計がどれほど強力であるかを知る価値があります!Lispを作成した人々は、いくつかのことを本当に正しくしました。1960年代にLispの現代言語のすばらしい新機能がどれほど多くあったかは驚くべきことです!

埋め込みスキームについては、guileを試してください:http ://www.gnu.org/s/guile/


私は主にC ++の男なので、C / C ++でうまく機能する方言はありますか?また、その方言を学び始めるために、ランク初心者のためのいくつかのリソースに言及してもらえますか?
TCSGrad

10
スキームを学ぶのに最適な本は、「The Little Schemer」と「SICP」mitpress.mit.edu/sicpです。c / c ++の内部に組み込むことができるスキームの実装は多数ありますが、最近はどれが良いかわからないので、グーグルで調べなければなりません。
ザカリーK

1
スキームは非常にシンプルであることを指摘しておきます!2時間で言語の約90%を学習します。もちろん、それはあなたがそれをマスターしたという意味ではなく、構文がどのように機能するかを知っているだけです。
ザカリーK

5
@ shan23 Schemeは教育用に設計されました。それは間違いなく新入生にプログラミングの方法を教えるために使用できるので、あなたはそれを学ぶのに問題がないことは間違いありません。CまたはC ++の統合が必要な場合は、Guile(en.wikipedia.org/wiki/GNU_Guile)をご覧ください
ビトーパイ

1
Kent DybvigのSchemeプログラミング言語の本はおそらくそれほど有名ではありませんが、非常に素晴らしい本です。 scheme.com/tspl4 Emacsを使用している場合、Lispを学ぶのは便利です。
blispr

68

質問2「最も広く使用されている方言」に対する回答:

「最も広く使用されている」の解釈方法に依存します。以下に、選択したいくつかの方言のそれぞれがどれだけ使用するかについての下限のナプキン数学を示します。

書かれたほとんどの生のコード

  • おそらく教育的なアプリケーションの ためのスキーム(すべての方言)
    • 270校...年間50人の学生、500行のコード/学生、10年間のランニングを想定しましょう。ナプキン計算に基づいた1,000,000行以上
    • ラケット自体とそのツールにある500,000行のラケット。
  • AIと、多くのオープンソースコードとプロダクションコードが原因のCommon Lispの可能性があります(プロダクションコードを参照)。
  • おそらくEmacs Lispの原因は...
    • Emacs自体:1,000,000行以上
    • 公に書かれたemacs lispの量-237モジュール、約200行/モジュールは、EmacsWikiで40,000行以上、おそらくELPAでさらに多く
    • さらに、emacs Lisp、.emacsファイルなどで記述されたアプリケーション
  • クロージュア
    • 推定が難しい。主に小さなドットコム。たくさんある可能性があります。

勝者:SchemeまたはCommon Lisp。未知数が多すぎます。

ほとんどの「本番」コード

勝者:Common Lispを推測しています。Common LispとClojureの使用に基づいて、質問1に「はい」と答えることができると思います。

ほとんどのエンドユーザー

  • Common Lisp
    • Orbitz、Bing Travel、Kayak.comなどのITA Softwareのお客様-おそらく数百万人。
  • クロージュア
    • シティグループ(詳細なし)、アカマイ(詳細なし)、simple.com、その他多数。おそらく数百万。
  • スキーム
    • CSの学生、研究者、愛好家。十億未満。
    • 未知のシリーズ-500 万人以上
  • Emacs Lisp-ほとんどがプログラマで、ほとんどがUNIXプラットフォームです。百万になる可能性があります。

勝者: Unchartedには販売数があるため、Schemeの下限はここが最高ですが、議論の余地があります。

結論

結論として、私はその大きなリンゴを見つけます。


4
小さなオレンジじゃない?またはプルプリーンレモン?
-Vatine

確かにスキーム-特にラケットスキーム-は、最新のLisp方言のようです。プロ級のツールとライブラリ。
ビカルレム

私は、OpenGLのサポートはそれほど日付はなかったが、その後、ダイレクトモードが...私のラケットコードの最大の障害ではありません願っ@Bikal
ジェシーミリカンを

OrbitzがCLを使用していることを知りませんでした...次の仕事を探す場所を知っています:D-
リグ

2
100k以上のLOCがRacketで書かれています。ラケット標準ライブラリ/ IDE /ツールは500k以上であり、さらにSET、Boeing、Naughty Dogなどの企業で使用されています。
サムトビンホッホシュタット

43

LISPは今日でもまだ実践/使用されていますか、それともレガシー言語ですか

はい、そうですが、どこを見るべきかを知っておく必要があります。LISPを使用する人は大声で叫ぶ傾向はありませんが、過去20年間にLISPを使用して大きな影響を与えた少数の有名なスタートアップの例がいくつかあります。また、ヨーロッパの小規模企業でも非常に人気があります。

最も広く使用されている方言は何ですか?

これは有効な質問ですが、答えるのは簡単ではありません。また、答えるのに特に有用なものではないかもしれません:多くの実装は特定の焦点を持っているので、それが他の方法で使用される範囲に基づくのではなく、特定の問題に適合する場合に最適に選択されます。代わりに、オプションについて少し説明しますので、自分で決定してください。

LISPは言語のファミリであり、それらの各言語には方言と実装のファミリがあります。方言は、大きく2つの「LISP」と「Schemes」に分類されます。

LISP:比較的最近まで、Common LISPは王様でした。これは、異種のLISPをすべて統合する試みであり、不親切ではないが、LISPの「C ++」でした。つまり、それは巨大な言語でした。それにはすべてがありました。過去数年間で、Clojureが登場しました。Clojureは、Java仮想マシン上で実行されるLISPであり、関数型プログラミングの哲学に根ざしています。従来、他のLISPは厳密にマルチパラダイムでした。Clojureは、LISPとJVMの両方で最高と最低の両方を取得できるため、興味深いものです。そこのJavaベースの言語の冗長性の多くはまだだとそれは別のもののためにノブやボタンがたくさんあるので、彼らはかなり自由で構文で簡単にしてきたが、彼らはいくつかを持って本当にデータ型に関する興味深いアイデア、特に関数型プログラミングからのアイデアを適用するためにそれらが思いついたいくつかの実用的な方法。

スキーム:スキームは、LISPの厳密なサブセットです。SchemeはSteeleとSussmanによって考案され、初期の頃はMIT Computing 101 Lecture Courseで使用されていたことで有名でした。スキームは、「アルゴリズム言語スキーム(RnRS)の改訂^ nレポート」で定義されています。はい:彼らはそこに数学のジョークを持っています。Schemeは、他のLISPにはない標準化された言語です。これは実装間の移植性を大いに助けますが、それは特効薬ではありません。標準化の取り組みは保守的である傾向があり、実装の革新は、特にモジュールのようなものを中心に、バラバラになる傾向がありました。IETFのRFCプロセスに似たSRFI(実装のためのスキーム要求)のシリーズもあります。人々はそれを使用して、必要に応じて小さなものを標準化します。

スキームはLISPとは異なり、一連の厳しい要件を満たす必要があります。その1つは、再帰を効率的にするのに役立つ「テールコールの最適化」です。したがって、LISPよりもSchemeの方がプログラミングの再帰スタイルがはるかに一般的です。Schemeも、不親切ではありませんが、LISPの「C」のようなものです。つまり、小さな言語であり、すべてを一度に頭の中に保持できるはずです。

現在、2つのスキームファミリがあります。5番目のバージョンに基づくもの(R5RS)と6番目のバージョンに基づくもの(R6RS)です。R6RSの複雑さは前任者のどれよりも非常に大きく、多くのR5RS実装はそれをスキップすることを選択し、R7RSがR6RSよりもR5RSに似ていることを期待しています。R7RSの標準化プロセスは現在進行中であり、R5RSの実装者の要望とR6RSの人々の要望の両方を、最初のワーキンググループで小さなベース言語を標準化してから、大きな機能を標準化するために2番目のワーキンググループに委託することで試みました。これにより、言語は、小さな組み込みハードウェアとより高性能なマシンの両方で効率的で有用な実装を行うことができます。

次に、より具体的にします。

PicoLispは、本当にクールなLISPです。小さいです!著者はそれを自分のために書いており、私が理解しているように、彼は1980年代からそれで生計を立てています。彼の講演に参加する機会があれば、それをすべきです。彼は本当に興味深く、彼のことをよく知っているので、主流や退屈なものの小さな匂いさえも聞き取れません。

私はCommon Lispの実装に詳しくないので、これ以上コメントしません。

Guileは公式のGNUスキームです。

ラケットはR6RSスキームですが、最近はネットを広げたようで、「言語の作成、設計、実装のプラットフォームとして機能するように」試みています。

チキンは実用的なスキームを目指しています。R5RSに基づいており、Cにコンパイルされます。これは、既存のCライブラリを使用することが非常に簡単になるため、非常に重要な利点であることがわかりました。したがって、Chickenは、Perl、Python、Rubyなどを日常のスクリプト言語として置き換えるためのおそらく最も便利なスキームです。数年間、すべてのニーズに排他的に使用している人がいます。インタラクティブなREPLとコンパイラがあります。コミュニティ(メーリングリストとIRCの両方)は知識が豊富で、フレンドリーで役に立ちます。

多数のモジュールを備えた実装を探します。これは、広く使用可能であり、手元のタスクに役立つものがある可能性が高いことを示しています。

コンパイラを使用した実装、または少なくともIDEまたはREPLベースではないものを探してください。教育用に設計された実装の多くは、汎用スクリプトの作成には非常に困難です。

それが私が使用するものであるので、私はチキンをお勧めします。私は自分の個人プロジェクトでそれを使用し、プロとして使用しています(そして現在使用しています)。

完全に時代遅れの場合、私は何かに過度の努力を注ぎたくはありません。

Schemeはプロとして死んでいるわけではありませんが、そのコンテキストでそれを使用するにはある程度の時間をかける必要があります。Chickenのようなものは、単なる学問以上のものであり、現在使用している高級言語のほぼすべての基盤を簡単にカバーできます。


3
ラケットはR6RSスキームではありません。Racketディストリビューションが提供する言語の1つがあります。実際のラケット言語は、いくつかの重要な方法でRnRSから出発するスキームです(これについては複雑な気持ちがあります)。
ジェイソンフルーツ

27

すべてのLispを実際に話すことはできませんが、Clojureは現在、間違いなくホットで関連性のある言語です。今週始めに行ったロンドンのClojureユーザーグループには、100人以上の参加者がありました。

過去1年間(JavaとC#での多くの経験の後)、Clojureの形でLispを学ぶことは非常に啓発的な経験であることがわかりました。この主な理由は次のとおりです。

  • 関数型プログラミング(他のほとんどのLispよりも)に非常に重点を置いています。著者およびBDFL Rich Hickeyは、言語設計のインスピレーションの1つとしてHaskellを頻繁に引用しています。つまり、完全に不変のデータ構造や遅延無限シーケンスなどを取得できるということです。
  • マクロメタプログラミング -Lispの「コードはデータ」という哲学は、実際に経験していない限り理解するのは難しいですが、それがLispが表現力豊かで生産的である理由の1つです
  • マルチコア同時実行性の素晴らしいサポート-実際のところ Clojureは同時プログラミングに最適な言語だと思います。これに関する啓発的なプレゼンテーションについては、http://www.infoq.com/presentations/Value-Identity-State-Rich-Hickeyを参照してください

また、以下の理由から、実際の実稼働での使用には実用的な選択のようです。

  • 非常に簡単なJava相互運用性を備えたJVM上で実行すると、Javaエコシステム内のすべてのライブラリとツールにアクセスできます。
  • デフォルトでは動的言語であるため、ほとんど定型化されていない開発やラピッドプロトタイピングに非常に便利です。ただし、静的型ヒントを追加して、必要な場所でかなり良いパフォーマンスを得ることができます。

個人的には、いくつかの投資銀行や新興企業でClojureを使用している人々を知っています。また、私は自分のスタートアップの主要な開発言語としてClojureを選択しました。そのため、自分の口のある場所にお金を入れたいと思います:-)


9

私は現在、Lispも学んでいます(そしてそれが大好きです)。Common Lispを使用していますが、SBCLArc(注、Vitor Bragaが言及したようにYahooストア/ Viawebを作成したPaul GrahamのバージョンのLisp)、およびVisual Studio for Lispに似たAllegro CL GUIを作成しますが、使用したことはありません)。

使用に関しては、Lispは人工知能で多く使用されてきましたが、正直なところ、Lispのその他の「一般的な」使用方法はわかりません。Lispで構築されたWebサイトの多くは、もともと他の言語で書き直されたため、Web開発で使用されているとは言い難い(そうではないが、それを使用する大規模なサイトはもはやそうではない) )。クイック検索(非常に迅速)を実行した後、Wikipediaの Common Lispで記述されたソフトウェアのリストを以下に示します。

[編集]専門的にLispを使用することに関しては、Lispを使用する仕事があります。JavaやC#のジョブほど多くはありませんが、存在しています。Lispは、内部アプリケーションに使用される言語の1つであり、企業がLispを使用していることを広告でgiveめたくない競争上の優位性を提供する可能性があると思います。Smalltalkは金融の分野でも似ていると述べたP.SEの投稿を見たことを覚えています。

また、異なるパラダイムを学習できることを示すことができれば、仕事でLispを使用しなくても、より多くの扉を開くことができます。

「Lispは、最終的にそれを手に入れたときに得られる深い啓蒙体験のために学ぶ価値があります。その経験は、実際にLisp自体をあまり使用しなくても、あなたの残りの日のためにより良いプログラマーになります。」-エリック・レイモンド、「ハッカーになる方法」

[/編集]


7
FWIW、SBCLはCommon Lispの実装であり、Allegro CLも同様です。
-Vatine

@Vatine-あなたは正しいでしょう。顔が赤くなっている場合は、今すぐ作ります。なぜ違うと思ったのか分かりません。ばかげたコンパイラー!=方言:)ありがとう!
ジェッティ

@Jeff:まあ、どちらも言語をさまざまな方向に拡張しますが、「CLコア」は相互運用可能です。
バティーン

@Jettiそもそも何を使っていたの?
マークC

CLISPを使用していたと思います。CLISPはもう持っていないVMイメージ上にありました。私の無知がそれを一般的なLispだと信じさせたと思う。少なくとも今はよくわかっています。
ジェッティ

8

あなたが今日Lispを学びたいなら、私は速いスキーム実装であるラケット(まあ、実際にはスキームから少し離れたので、今ではそれ自身の方言です)またはclojureのいずれかを見ますJVMが実行されます(したがって、膨大な数のライブラリが利用可能です。さらに、独自のJavaコードとやり取りすることもできます)。

それを実際に使用することを学ばなくても、学ぶことは常に有益です:しばらくLispに心を包んだら、他の言語であっても、問題を考え、対処する新しい方法を学びます。


3
Schemeの問題は、Schemeで練習を始めたときに、他の言語に戻りたくないことです。私はC ++でストリーム(おそらく無限、遅延評価された不変のシーケンス)を実装し始めましたが、それはSchemeよりもはるかに多くのコードです!Schemeのシンプルさとパワーの組み合わせには本当に驚きました。
ジョルジオ

ラケット用の++。他のスキームの批判の1つである、非常に完全なものです。そして、独自の言語を作成することに関してスキームができることを超えています。
スコットクラレンバッハ

7

Amazonバックエンドの大部分はLispにあったものでしたが、今ではC ++で書き直されました。

Yahoo! ストアは、Lisp Webアプリの典型的な例の1つです。Yahoo!から ポールグラハムのことを聞いたことがあるかもしれません。Grahamは最も有名なLisp支持者の1人であり、この主題について広く書いています。あなたは彼のサイトを読んで、彼のポイントを知りたいかもしれません。

AutoCADは、マクロシステム用のLisp方言を使用していました。まだそうなるかどうかはわかりません。

Schemeはクリーンな言語であり、非常にエレガントです。おそらく私のお気に入りのプログラミング言語なので、偏見があるかもしれません。今すぐ主要なアプリケーションを作成する場合は、おそらくCでスケルトンアプリケーションを作成し、Schemeでビジネスルールを拡張および定義します。これにより、Schemeを使用し、Cを活用して、ほとんどすべてのライブラリの速度と完全な可用性を実現できます。


Schemeの最初の本/コンパイラとして何をお勧めしますか?私はLinuxを使用しているので、初心者向けに明示的に役立つエディターがあれば(KileはLaTexのように)、教えてください
...-TCSGrad

1
@ shan23 Little Schemer(ccs.neu.edu/home/matthias/BTLS)が最善の策です。emacsはSchemeの最も一般的なエディタであると思いますが、慣れるまでには時間がかかります。
ビトーパイ

1
Lispのエディターは簡単です。emacsを使用してください。Lispの人たちによって、Lispで書かれました。
ザカリーK

Racket IDE(racket-lang.org)を使用することもできます。Emacsに似ていますが、自動フォーマットとSchemeインタープリターとの相互作用があります。
ジェレマイアウィルコック

Lispbox(common-lisp.net/project/lispbox)はそのまま使用できます(いくつかのemacsの経験が役立ちます)。これは、CCL(に基づいてccl.clozure.com)も参照gigamonkeys.com/book/...
ジョルジオ

4

LISPは今日でもまだ実践/使用されていますか、それともFORTRAN / COBOLなどのレガシー言語ですか?つまり、既存のコードを維持することとは別に、新しいプロジェクトでまったく使用されますか?

シリコンバレーのいくつかのスタートアップでLispをやっている人を何人か知っています。Amazon.comは最初からLispを使用していることを知っています(何らかの理由でLispをC ++に置き換えていると聞きましたが?)

しかし、注目すべき会社の1つは、Naughty Dogです。彼らのゲームはすべてLisp方言で書かれています。もともと、彼らは独自に展開しましたが、UnchartedシリーズではMZSchemeを使用しています。

最も広く使用されている方言は何ですか?最も一般的な2つの方言としてSchemeとCommon Lispに出会いましたが、どちらが最も好まれ/有用な方言であるかについてのあなたの意見が欲しかったです-そして、あなたが最初のランク初心者のためのリソースを提案できるなら、非常に満足します。

Common Lisp、Clojure、Scheme、およびEmacs Lispは、最も広く使用されている4つの方言であり、そのうち、Schemeが最も一般的に展開されていると思われます。もちろん、これをバックアップするものは何もありません。:)

他の人から示唆されているように、私はむしろSICPとLittle Schemerが好きですが、Land of Lispもお勧めします。:)


実際、Land of Lispは驚くべき読み物です。
-Chiron

@ 4bu3li賛成票はありませんか?
マークC

1
Naughty Dogについて:それは完全に正しいわけではなく、PS2ゲームはLispに似た言語であるGOALで記述されていました... MZSchemeは主にマクロプリプロセッサとして使用され、C ++でインラインで記述され、一部の資産処理に使用され、それらのスクリプトの一部はS-expsで記述されています。しかし、実際にはMZSchemeコードはPS3で実行されません。
アレリウス

2

私はそれがあなたがそれで何をしたいかに部分的に依存すると思います-あなたがプログラミングのさまざまな概念への洞察を深め、自分をより良いプログラマにすることを検討しているなら、少なくともLispを少し学ぶ価値があると思います。この言語で仕事をするために履歴書に追加する別の言語を探しているなら、おそらく他の場所を探したいでしょう。そこにはそれほど多くのLispジョブはありません。

私は個人的にSBCLまたは最近ではClojure(およびいくつかのEmacs Lispですが、私は長期のEmacsユーザーであるためhtatを使用しています。Lispを学習しようとするとEmacs Lispを学習しようとします)。今私がする必要があるのは、実際にそれらの言語で遊ぶ時間を見つけることです...


1
そのほとんどが最初です...そのことに成功すれば、履歴書をまったく傷つけないことは確かです:)。しかし、真剣に、私は異なるプログラミングの「スタイル」についての視点が欲しいので、異なるシナリオでどちらを使用するかについて良いアイデアを持っています(ハンマーだけが装備されている状況に陥りたくない、すべての問題を爪として扱わなければなりません!!)
TCSGrad

2

LISPにはたくさんの仕事があることはわかりませんが、確かに見ることができません。しかし、LISPを実行していて、地球から新しいコードを挿入できたNASAプローブについて長い間読んだことを覚えています。

また、ニューヨークでは、clojureミートアップグループが巨大です。興味があり、clojureミートアップグループに行くと、ネットワークを作って仕事を見つける機会を見つけるかもしれないと思います(clojureの仕事ではなく、Java / C ++など)。ニューヨークエリアでは絶対に巨大なようです、他のエリアは異なる場合があります。

また、LISPは別の考え方です。さらに、LISPとSQLは両方とも、大量のネストされた式を使用します。SQLを大量に使用した後、LISPの方が理にかなっていることに気付きました。ただし、LISPを使用しているときにスーパーネストされた括弧と式に慣れるのにSQLに問題がある場合、おそらくSQL式の計算がはるかに簡単になります。

典型的な例は、MAX(a、b、c)の実装方法です。たくさんのifステートメントで複雑な関数を作成できます。または、あなたはただ言うことができます

MAX(MAX(a、b)、c)

そして、私にとって読みやすい2つのアイテムMAXの2つの単純なネストされた呼び出しを使用します。パフォーマンスが問題になる場合は、他の方法でも行うことができますが、各メソッドを使用するときに比較の数を数えることはありませんでした...また、Cマクロまたは式が複数回評価される可能性があるため、期待される結果が得られない可能性があるため、副作用に注意してください...


3
あなたは実際にMAXを単純化することができますMAX(MAX(a b) c)
アンドレア

あなたは正しいです、それは私が目覚めた後すぐに答えるために得るものです。答えを調整しました。
チェルボ

2
NASAプロジェクトはディープスペース1 でした
フランクシェラー

2

追加の2つのポイント:

まず、Lispは、関数やデータ間の相互作用が複雑なことが多いコードを記述するための優れた言語です。多くの一般的な言語では、プログラムが実行中の処理を実行する理由について混乱している場合、プログラムの進行中の内部状態を調べるための特別な関数を作成する必要があります。一部の言語では、コードの再コンパイルを待つ必要があります。もちろん、これを支援するデバッガーなどのツールがあるかもしれません。しかし、Lispでは、必要なのはプログラムを停止する方法だけで、通常はLispのすべてにアクセスできます。Common Lispでは、時々^ Cと入力するか、error単一の関数に変換します(これは再コンパイルする必要がある唯一のものであり、再コンパイルするために何もする必要はありません)。プログラムを停止すると、すぐにデバッガーにスローされますが、デバッガーはLispのすべての機能を提供し、デバッガーを終了したり、特定の関数を呼び出したりすることができます。任意のデータ構造を簡単に調べることができます私のプログラムで。ほとんどのスキームでは、同様のプラクティスを許可する必要があります。Lispはこの点でユニークではありませんが、多くの一般的な言語が提供するものを超えています。

2番目:Lispの方言で実験するつもりなら、(a)括弧に一致するエディターを使用し、(b)適切なLispインデントを学習することなしにそれをやらない。適切なインデントに近いエディターを使用することもお勧めします。C / C ++ / Javaスタイルのコードフォーマットは、Lispよりも括弧/括弧/括弧が少ない言語向けに設計されています。Lispプリティプリンティングスタイルは、慣れればうまく機能し、括弧で混乱したり、行ごとに1つの閉じ括弧を入れてスペースの半分を無駄にしたりすることはありません。


1

現時点では、Lispはコンサルティングショップで主に使用されているという印象を受けます(コンサルティングショップではほとんど使用されていません)。

実用的なソフトウェアには少々手間がかかります。主に人々がそれに慣れていないので、私は信じています。

従来、SchemeはLispのかなり学術的な方言であり、Common Lispは業界の方言でした。

Lispは、特にシンボリック操作とリフレクション風の機能に役立ちます。

例として、私がLispを学ぶために書いたコードは、ランダムなラムダ関数を構築し、それらを評価し、それらを操作して、ターゲット関数との関数の違いを最小化しようとするプログラムでした。それはすべて直接操作でした。C ++やJavaのような言語では、コンピューターが操作する機能の表現を発明しなければならなかったでしょう。


Scheme / Common Lispの違いについておもしろいことを述べました-その理由/方法を詳しく説明していただけますか?
-TCSGrad


1

Common LispとSchemeについての見通しを追加したいと思います。JVMのためにclojureを避けたので、あまり見通すことができません。

Schemeは、美しく簡潔で明確に定義された言語です。レガシーのためにCLがしなければならなかった多くの決定を取り、より純粋なアプローチを取りました。たとえば、変数と関数は同じ名前空間にあります。デフォルトの言語は小さくて簡潔です。これは、Lispが得意なことを教えるのに適しています。たとえば、デフォルトでは反復ループがなく、末尾呼び出しの最適化が必要なため、反復ではなく再帰の使用に圧力をかけます。Schemeには非常に興味深い衛生的なマクロシステムがあり、学習には非常に価値があります。しかし、IMOでは、CLスタイルの非衛生的なマクロを最初に学習することをお勧めします。ほとんどの(?)スキームの方言は、仕様の一部ではない場合でも、少なくとも1つの実装を提供します。あなたが学習のために言語を学びたいと思うことは非常に多いので、私は

とはいえ、Schemeのコミュニティは断片化されており、いくつかの小さなポケットを除いて、ほとんどが実際の作業を完了するための研究に専念しているようです...方言を越えて、これはスキームコミュニティの大きな問題です。

一方、Common Lispは、言語を開発するためのはるかに実用的なアプローチのようです。標準では、多くのLispコードが実装間で移植可能であり、多くのコンパイラが高速で最適化されています。パッケージの大規模なセットがあり、その多くは実装間で移植可能です。そして、一見すると(比較的)大量の実際の製品が言語で作成されています。また、quicklispを使用すると、パッケージ管理は、RubyやNodeなどの現代のコミュニティで得られるものにかなり近いと感じます。しかし、CLには欠陥がないわけではなく、スキームと比較してこの時点で非常に大きな仕様があり、Lispsのライブラリとして伝統的に書かれているオブジェクトシステムCLOSでさえ、仕様IIRCの一部です。また、大量のシステムにレガシーが定着していると感じることができます。

そうでなければ、私はclojureで話すことができないと言いました、そしてあなたの目標がEmacs拡張を書くことであるならEmacs Lispは明らかに適切な選択であり、他のソフトウェアに適切な選択ではありません。

TLDR; あなたの目標が学ぶことである場合、私はSchemeをお勧めします。ただし、ソフトウェアを作成する場合は、2つの主要なLispバリアントのCommon Lispをお勧めします。


ところで、PLTラケットは、よりスキームに似た言語であり、元々は実際の作業に役立つようにしようとしているスキームコミュニティの言語です。私が最近スキームでコードを書くとしたら、それはおそらくPLTかChicken Schemeのどちらかでしょうが、後者は私の心のソフトスポットのためかもしれません。
アレリウス

0

答えから多くを学びました。この啓発的な会話に貢献したすべての人に感謝します。

newLISPに言及する必要があります。CLとSchemeの両方とは少し異なりますが、非常に便利な多くの機能を実装しています。httpサーバー、マルチプロセッシング機能(Cilk)、リモート評価機能は非常にクリーンで使いやすいと思います。

単一の実行可能ファイルは小さく、高速で、多くのクールなバッテリーが含まれています。


おそらくそれを言及するのは公平かもしれませんが、私はそれを正確に推奨しません...レキシカルスコーピングもモジュールもありません-真剣に?私はnewLISPが達成しようとしているものを本当に得ていません。
cji

2
あなたは正しい-それは異なっています。コンテキストと動的スコーピングを使用し、私の経験からモジュールとコンテキストは相互に関連しています。別のCLでもSchemeでもありません。違いのページ(newlisp.org/index.cgi?page=Differences_to_Other_LISPs)を読むと、設計上の問題が明らかになります。同様に、CLやSchemeの経験を望む人にはお勧めしません。しかし、一部のユースケースでは、実行可能な選択肢になる可能性があります。それがオープンソースのエコシステムの美しさです-多くの選択肢があります!
Cyber​​Fonic

0

学習するLispの方言を選択する際に考慮すべきもう1つの要因は、実装の数と品質です。方言に1つまたは2つの実装しかない場合、それらの欠陥が修正されるまでその欠陥に固執し、人々は実装の改良をやめる可能性が常にあります。それ自体は、Lispの単一実装方言を使用しない理由ではありませんが、考慮に入れるべきものです。SchemeとCommon Lispの利点は、これらの方言の多くの実装があることです。どちらの言語も標準を公開しているため、比較的最近の実装ではほとんど同じコードが実行されます。これらの実装の一部は長い間使用されてきましたが、まだ活発に開発されています。現在は高品質の実装であり、まだ洗練されています。


:まあそれに応じてClojureのはSBCLと比べて悪くないやっているベンチマークbenchmarksgame.alioth.debian.org/u32/...
AndreasScheinert

アンドレアスに感謝します。あなたが正しい。JVMについて私がどれだけ知っているかを示します。一部、ABCLに惑わされました。ABCLは、比較的低速ですが、それ以外は素晴らしいJVMベースのCLです。
火星

JVMでLispが必要な場合は、Clojureに行きましょう。それは完璧ではありませんが、それは本当の喜び(
IMHO
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.