Lispの何がそんなに素晴らしいのですか?[閉まっている]


103

Lispが良いか悪いかを言うのに十分なLispを知りません。Lispを使用したすべての人が気に入っているようですが、最近最も人気のある言語はCに由来しています。

では、Lispの何がそれほど優れているのか、そしてなぜそれをより多く使用しないのか?Lispについて明白な悪い点はありますか?


5
「最近最も人気のある言語は、表面的にはCに由来しています」。中括弧の使用だけでなく機能を見ると、現代の言語はLispからそれほど遠くなく、常に近くなっていることがわかります。C#やPythonやRubyでプログラム、と言う、それはC.を好きになるよりも多くのLispのように多くのことを見ていきます
ケン

11
Cのように見えるがLispのように振る舞う言語の良い例はJavaScriptです。そのデザインの多くは、Schemeに似ています。
JAL

良い点、ケン:Lispに固有であった機能(ファーストクラスの関数、データとしての関数、さらにはマクロ)が他の言語で登場することが増えています。そして、フィードバックは一方向ではありません:Lispは他の言語の認識において新しい技術とイディオムを進化させています(例えば、オブジェクト指向パラダイムの成功に対応するCLOS)。
itowlson

6
Lispは世界中からアイデアを取り入れてきましたが、CLOSは何に反応したのですか?CLOS(1986-1987)は、主にLispの初期のオブジェクトシステムの標準化でした。たとえば、Lisp Machine Lisp(1980)にはフレーバーが含まれていました。「OOパラダイムの成功」が1980年にまだ明白だったとは思いません。「クラスのC」は1年しか経っていません(まだ「C ++」に改名されてから3年経っています)。そのSimula-67は非常に人気があった。Lispには、現在人気のある言語にはない他の高度な機能がたくさんあります。OOはたまたま成功しましたが、Lispは人気があったため(またはいつ)成功しませんでした。
Ken

Lispを使用したすべての人がそれを愛するとは思いません。私の経験は違います。Schemeで始めたコンピュータサイエンスの学生に聞いてみてください。おそらく、約10%がそれを愛し、30%がそれを尊重し、60%がそれを嫌います。私はまた、最も人気のある言語はCから派生しているとは思わない
ライナーJOSWIG

回答:


59

Lispはプログラミング言語のチャックノリスです。

Lispは、他の言語が評価される基準です。

Lispを知ることは、開発者の啓蒙を実証します。

私は3つの弱点(およびそれらの反論)を聞きました:

  1. 動的型付け。

    静的型付き言語には、特定のクラスのエラーをキャッチして実行時に発生しないようにするための十分な情報をコンパイラーに提供することをめぐって議論があります。しかし、まだテストする必要があります。

    この記事では、より強力なタイピングと強力なテストという動的なタイピングと、より多くのテストについて論じています。

  2. 受け取りにくい。

    これには実際には、学習とツールの2つの部分があります。

    Lispは実際に「取得」するために多少の努力を必要としますが、Lispを学ぶことは本当に他の言語でより優れたプログラマーになるので、それだけの価値があります。たとえば、実際にクロージャを「取得」したら、Javaの内部クラスを理解できます。そして、ファーストクラスの関数を「取得」すると、それらのない言語を使用するたびに落ち込んでしまいます。

    私が読んだリトルスキーマーをして読んでいます実用的なCommon Lispの両方優れています、。

    次はツールです。私はMacを使っているので、Aquamacs Emacs(初心者がEmacs を使いやすくする)とSteel Bank Common Lisp(SBCL)に焦点を合わせました。

  3. ライブラリーの欠如。

    まだはっきりとはわかりませんが、疑います。Webサイトを構築する場合、HunchentootElephantが優れたツールセットを提供しているように見えます。しかし、実際にはLispersがライブラリーの欠如について不平を言っているのを見ません(たぶん、Lispは非常に強力で、必要ないだけなのでしょうか?)。


4
対処方法(3)-Clojureを見たことはありますか?
viksit 2010

5
「しかし、Lispersがライブラリの欠如について不平を言っているのを見ることは実際にはありません(たぶん、Lispは非常に強力で、必要ないだけなのでしょうか?)」私は最後のステートメントを「(おそらくLispは非常に強力なので、それらには必要ないのでしょうか?)」に修正します。これは大きな違いを生みます。
Agnius Vasiliauskas 2010

49
lispがすばらしい理由を述べていない、私からの反対票。
Kilon

30
「Xはすごい!Xはすごい!XはYに似ているし、私がすごいと言っているのですごい!」「なぜXが優れていると見なされるのか」に対する答えではありません。政治的言及も不適切で役に立たない(ほとんどの人は、リバータリアニズムが良い考えでさえないと考えている)3点は参考になりますが、「弱点A…でも実は弱点でもない!」でなくて良かったです。
スーパーベスト2012年

1
Lispはプログラミング言語のチャックノリスです。それがとても良いところです とった。反対投票。
NiCk Newman、2015

71

「Lispはプログラム可能なプログラミング言語です。」
— John Foderaro、CACM、1991年9月

これが私の見解です:

表面的には、Lispは素晴らしくシンプルな関数型プログラミング言語です。構文はほとんどなく、すべての要素が論理的に組み合わされています。

もう少し深く掘り下げる場合は、SICPを読んでください、メタサーキュラーエバリュエーターを作成すると、2つのことがわかります。1つは、インタプリタ全体(いくつかのプリミティブのみが与えられている)はコードのページにすぎず、2つは、コードとデータの関係です。エレガントなプログラミング手法を可能にします。

これを完全に吸収すると、他の言語はあなたにいくつかのことだけを言うことができるようになっているときに石で固まっているように感じます。Lispは、構文とセマンティクスを定義できれば抽象化を構築できます。


1
理論的には、Rust、Ruby、C、Java、Python、Erlangなどの任意の言語をLispに埋め込むことができます。したがって、Python(Hy)とRustのs式バージョンは(Risp)と呼ばれます(ただし、これらがどれほど安定しているかはわかりません)。Pythonの代わりにHyでコードを記述する場合、parinfer / paredit(shaunlebron.github.io/parinfer)のようなマクロおよび構造編集の機能があります。マクロを使用すると、独自のDSLをLispに埋め込むことができます。また、マクロを使用して、コンパイラマクロを介して低速コードを高速コードに変換することもできます。sexpツリーを変換することにより、Python(Hy)コードをRust(Risp)に変換することもできます。
aoeu256

私はこのことわざを何度も聞いたことがあります。@ aoeu256についてもう少し考えてみませんか?
学生

66

Lispは非常に最小限でシンプルな規則的な構文を持っているので良いです。

Lispは、最小限のシンプルな規則的な構文を持っているので悪いです。


4
最小限のシンプルな通常の構文の何が悪いのですか?
oskarkv 2013

27
@oskarkv-完全に規則的な最小限の構文は、特定の使用に対する偏りがないことを意味します。これは、パレートの原則に出会うまでは良さそうです。最も一般的に発生するケースに偏り、すべてのケースが等しく発生する可能性が高いと偽るのをやめる方が効率的です。顧客の20%がニューヨークに、80%がロサンゼルスにいる場合、地理的に「偏見のない」状態を保つために、カンザス州とオクラホマ州の境界のどこかにあるフェンスに座るのは理にかなっていますか。それとも、ほとんどの顧客がいる場所に行くほうが理にかなっていますか?可能性のある問題に向かって機能を歪める言語を優先します。
Daniel Earwicker 2013

4
Lisp構文は本当に良いです。私はClojureの後でHaskellを学びましたが、そのときまでHaskellの構文でさえ邪魔に感じられました。Lispの日税の均一性は素晴らしいです。だから、私はあなたが話しているバイアスが正確にわかりません。柔軟性に偏る?悪いですね。
oskarkv 2013

3
そのように置くと、音が悪くなります。そんな風に入れなかった!最も一般的な出来事、最も可能性の高い状況へのバイアスはどうですか?これらは(もちろん)相対的な用語なので、何をしているのかによって異なります。自分がやろうとしていることに関する情報が本当に不足している場合、準備しようとしても意味がありません。しかし、それはおそらく正しくありません。あなたは情報を持っているので、準備が必要な最も可能性の高い状況に向けて自分で準備( "バイアス")できます。
Daniel Earwicker 2013


16

ここにいくつかの役立つリンクがあります:


1
Lispは素晴らしいです(マクロが少し密集していることは認めますが、私はちょうど途中です)。しかし、それを読むにはLispを知る必要があります。この小さな問題は別として、Lispだけでなく、ソフトウェアエンジニアリング全般に関する素晴らしい本です。
JS


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.