129

私は Lisp を学ぶべきだと強く感じていますし、Lispを学ぶのに役立つ優れたリソースがたくさんあります。

私は複雑な構文にうんざりしていませんが、「従来の商用プログラミング」のどこで、手続き型言語の代わりにそれを使用するのが理にかなっている場所を見つけるでしょうか。

Lisp で書かれた商用キラーアプリはありますか?

4

29 に答える 29

132

Lispは大きくて複雑な言語であり、それをサポートするための大きくて複雑なランタイムを備えています。そのため、Lispは大きくて複雑な問題に最適です。

さて、複雑な問題は複雑な問題と同じではありません。複雑な問題は、細かい部分がたくさんある問題ですが、それは難しいことではありません。航空会社の予約システムを作成することは複雑なビジネスですが、十分なお金とプログラマーがあれば、それは難しいことではありません。違いがありますか?

複雑な問題は、複雑な問題であり、従来の分割統治法が機能しない問題です。ロボットを制御したり、表形式ではないデータ(言語など)を操作したり、非常に動的な状況を処理したりします。

Lispは、ソリューションが拡張可能でなければならない問題に非常に適しています。古典的な例はemacsテキストエディタです。それは完全にプログラム可能であり、したがってそれ自体がプログラミング環境です。

Norvigは、彼の有名な著書PAIPで、Lispは探索的プログラミングに理想的であると述べています。つまり、(オンライン予約システムとは対照的に)完全には理解されていない問題の解決策をプログラミングします。言い換えれば、複雑な問題です。

さらに、Lispを学ぶことで、忘れられていた基本的なこと、つまりVonNeumannとTuringの違いを思い出すことができます。ご存知のように、チューリングの計算モデルは興味深い理論モデルですが、コンピューターを設計するためのモデルとしては役に立ちません。一方、Von Neumannは、コンピューターと計算の実行方法のモデルを設計しました。VonNeumannモデルです。Von Neumannモデルの中心は、メモリが1つだけで、コードとデータの両方をそこに格納することです。Javaプログラム(またはC#、または好きなもの)がチューリングモデルの現れであることに注意してください。あなたはあなたのプログラムを具体的に設定します。次に、そこにスローされるすべてのデータを処理できることを望みます。

LispはVonNeumanモデルを維持しています。コードとデータの間に明確な、事前に決定された境界はありません。Lispでのプログラミングは、フォンノイマンモデルの力にあなたの心を開きます。Lispでプログラミングすると、古い概念を新しい観点から見ることができます。

最後に、インタラクティブであるため、プログラムを開発するときに(コンパイルして実行するのではなく)プログラムを操作する方法を学びます。これにより、プログラミングの方法やプログラミングの表示方法も変わります。

このイントロで、私はついにあなたの質問への回答を提供することができます:それが「伝統的な」言語よりも優れている場所を見つけますか?

高度なプログラマーの場合は、高度なツールが必要です。そして、Lispより高度なツールはありません。または、言い換えれば、問題が難しい場合、答えは「はい」です。それ以外はありません。

于 2008-09-15T15:02:27.940 に答える
58

Lisp の主な用途の 1 つは人工知能です。大学の私の友人は、大学院の AI コースを受講し、主なプロジェクトとして Lisp で" Lights Out " ソルバーを書きました。彼のプログラムの複数のバージョンは、わずかに異なる AI ルーチンを使用し、40 台ほどのコンピューターでテストしたところ、かなり素晴らしい結果が得られました (リンクできるようにオンラインのどこかにあればいいのですが、そうではないと思います)。

2 学期前、私は Scheme (Lisp に基づく言語) を使用して、Abbott と Costello の「Who's on First」ルーチンをシミュレートする対話型プログラムを作成しました。ユーザーからの入力は、いくつかのかなり複雑なデータ構造 (他の言語のマップに似ていますが、はるかに柔軟) と照合され、適切な応答が何であるかが選択されました。また、3x3 のスライド パズル(より大きなスライド パズルに簡単に拡張できるアルゴリズム) を解くためのルーチンも作成しました。

要約すると、Lisp (またはスキーム) を学習しても、AI 以外の多くの実用的なアプリケーションは得られないかもしれませんが、他の多くの人が述べているように、非常に価値のある学習体験です。Lisp のような関数型言語でプログラミングすると、再帰的に考えるのにも役立ちます (他の言語で再帰に問題があった場合は、これが大きな助けになる可能性があります)。

于 2008-08-07T14:22:36.603 に答える
58

@lassevkへの応答:

代替テキスト

于 2008-09-16T06:44:04.730 に答える
48

複雑な構文??

Lisp の構文は信じられないほど単純です。

Lisp: emacsで書かれたキラーアプリ。Lisp を使用すると、emacs を自由に拡張して、エディタが実行できると考えられるほとんどすべてのことを実行できます。

しかし、Lisp は必要な場合にのみ学ぶべきであり、職場で使用することは決してないかもしれませんが、それでも素晴らしいものです。

また、追加したいのは、Lispが意味をなす場所を見つけたとしても、Java、c++、c#、python、rubyなどで使用する必要があることを他の人に納得させることはおそらくないでしょう.

于 2008-08-07T13:56:51.430 に答える
26

直接の経験から答えることはできませんが、Paul GrahamがLispについて書いたものを読むべきです。「キラーアプリ」の部分については、Beating the averagesをお読みください。

于 2008-08-07T14:00:39.473 に答える
18

私は約 1 年間専門的に Lisp でプログラミングしましたが、学ぶ価値は間違いなくあります。すべての定型コードを可能な場合は関数に、そうでない場合はマクロに置き換えることができるため、コードから冗長性を取り除く比類のない機会が得られます。また、実行時に比類のない柔軟性にアクセスし、コードとデータの間を自由に変換することもできます。したがって、ユーザーのアクションが複雑な構造を動的に構築する必要性を引き起こす可能性がある状況は、Lisp が真に輝く場所です。人気のある航空会社のフライト スケジューラは Lisp で書かれており、Lisp で書かれた CAD/CAM もたくさんあります。

于 2008-08-12T13:10:30.033 に答える
10

Lisp は、小さな DSL を作成するのに非常に便利です。私は職場で動作する Lisp in a Box のコピーを持っており、SQL サーバー データベースに問い合わせたり、C# でデータ層などを生成するための小さな DSL を作成しました。私のボイラー プレート コードはすべて、C# に出力する Lisp マクロで記述されています。HTML、XML、あらゆる種類のものを生成します。Lisp を日常のコーディングに使用できればと思いますが、Lisp は実用的なメリットをもたらします。

于 2008-08-26T10:48:14.380 に答える
9

あなたがプログラミングが好きなら、あなたはそれの純粋な喜びのためにLispを学ぶべきです。XKCDは、その後の知的啓蒙を完璧に表現しています。Lispを学ぶことは、プログラマーにとって、仏教の僧侶にとっての瞑想とは何かということです(そして、私はこれを冒涜的な意味合いなしで意味しました)。

于 2008-08-26T09:51:45.983 に答える
6

言語の一般的なインデント規則を使用しない場合、どの言語も非常に難しく見えます。Lisp のそれらに従うと、それが構文木構造を非常に簡単に表現する方法がわかります (注: プレビューが少し横になっているため、これはまったく正しくありません; r は再帰的なクイックソート引数の fns と一致する必要があります):

(defun quicksort (lis) 
  (if (null lis) 
      nil
      (let* ((x (car lis)) 
             (r (cdr lis)) 
             (fn (lambda (a) 
                   (< a x))))
         (append (quicksort (remove-if-not fn 
                                           r)) 
                 (list x)
                 (quicksort (remove-if fn 
                                       r))))))
于 2008-08-12T13:03:58.283 に答える
5

LISP / Schemeを学んでも、アプリケーションスペースを増やすことはできないかもしれませんが、関数型プログラミング、そのルール、およびその例外をよりよく理解するのに役立ちます。

6つのネストされた純粋関数の美しさと、副作用のある6つのネストされた関数の悪夢の違いを学ぶだけでも、時間の投資に値します。

于 2008-11-27T05:34:02.063 に答える
5

http://www.gigamonkeys.com/book/introduction-why-lisp.htmlより

Lisp に関して最もよく繰り返される神話の 1 つは、Lisp は「死んでいる」というものです。Common Lisp がたとえば Visual Basic や Java ほど広く使用されていないことは事実ですが、新しい開発に使用され続け、新しいユーザーを引き付け続けている言語を「死んでいる」と表現するのは奇妙に思えます。最近の Lisp のサクセス ストーリーには、Paul Graham の Viaweb が含まれます。これは、Yahoo が彼の会社を買収したときに Yahoo Store になりました。ITA Software の航空運賃の価格設定およびショッピング システムである QPX は、オンライン チケット販売業者の Orbitz などによって使用されています。Naughty Dog の PlayStation 2 用ゲーム、Jak と Daxter は、Naughty Dog が発明した GOAL と呼ばれるドメイン固有の Lisp 方言で大部分が書かれており、そのコンパイラ自体は Common Lisp で書かれています。そしてルンバ、そのソフトウェアは Common Lisp の下位互換性のあるサブセットである L で書かれています。おそらくそれよりも、オープンソースの Common Lisp プロジェクトをホストする Common-Lisp.net Web サイトの成長と、ここ数年の間に発生したローカル Lisp ユーザー グループの数が、さらに重要です。

于 2010-04-02T03:40:33.010 に答える
5

新しい言語を学ぶことは、既に知っている言語でのプログラミング スタイルに常に影響を与えることがわかりました。私にとっては、Java という第一言語で問題を解決するために、常にさまざまな方法を考えさせられました。一般的に、プログラミングの観点から視野を広げるだけだと思います。

于 2008-08-12T14:51:46.863 に答える
5

私は 80 年代に大学で「Lisp クラス」を受講しました。クラスで提示されたすべての概念を理解したにもかかわらず、私はLisp の優れた点を理解することができませんでした。残念なことに、多くの人が Lisp をただのプログラミング言語の 1 つと見なしているのではないかと心配しています。Lisp 構文 (またはその欠如) について不満を言う人を見かけたら、その人は Lisp の素晴らしさを理解できていない人である可能性が高いです。私は非常に長い間、それらの人々の一人でした。

20 年後、私が Lisp への関心を再燃させてから、Lisp の何が面白いのかを「理解」し始めました。クロージャや Lisp マクロに圧倒されずに Lisp を習得できた場合は、おそらく要点を見落としています。

于 2008-08-30T22:47:55.930 に答える
4

lispを学ぶことで、Javascriptはまったく別の見方になります!Lispは、再帰と「ファーストクラスオブジェクトとしての機能」パラダイム全体の両方を把握することを本当に強制します。SchemeとJavascriptに関するCrockfordsの優れた記事を参照してください。Javascriptはおそらく今日の周りで最も重要な言語なので、Javascriptをよりよく理解することは非常に役立ちます!

于 2008-08-20T09:58:38.310 に答える
4

Lisp を学ぶべきかどうかを自問しなければならない場合でも、おそらくその必要はありません。

于 2008-08-12T15:21:52.763 に答える
4

「Lisp は、最終的にそれを手に入れたときに得られる深遠な悟りの経験のために学ぶ価値があります。たとえ実際に Lisp 自体をあまり使用したことがなくても、その経験は残りの日々をより良いプログラマーにしてくれます。」

-- エリック S. レイモンド、「ハッカーになる方法」

http://www.paulgraham.com/avg.html

于 2011-08-06T22:06:35.993 に答える
3

Lisp は、商用環境では決して使用できない言語の 1 つであることには同意します。しかし、たとえそれができなくても、それを学ぶことで、プログラミング全体に対する理解が確実に広がります。たとえば、私は大学で Prolog を学び、その後使用することはありませんでしたが、多くのプログラミング概念をより深く理解し、(時には) 使用している言語をより深く理解することができました。

しかし、もしあなたがそれを学ぶつもりなら...是非、On Lispを読んでください。

于 2008-08-07T14:01:22.623 に答える
3

複雑な構文?Lisp の美しさは、途方もなく単純な構文を持っていることです。これは単なるリストであり、リストの各要素は別のリストまたは基本データ型のいずれかになります。

関数を別のデータ型として考えて使用するコーディング能力が向上するため、学習する価値があります。これにより、命令型言語やオブジェクト指向言語でコーディングする方法が改善されます。これにより、コードの構造に精神的に柔軟に対応できるようになるからです。

于 2008-08-07T14:01:59.687 に答える
3

わかりました、私は奇妙かもしれませんが、Paul Graham のエッセイはそれほど好きではありません。また、Common Lisp をまだある程度理解していない場合、Lisp についての本は非常にラフな本です。代わりに、Siebel のPractical Common Lispを使用することをお勧めします。「キラーアプリ」に関しては、Common Lisp はITAのようなニッチなショップでその場所を見つけているようです。そのため、Ruby の Rails のように CL と同義のアプリはありませんが、業界にはそれを使用する場所があります。少し掘る。

于 2008-08-07T14:12:15.563 に答える
3

Gimp の Script-Fu は唇っぽいです。それはPhotoshopキラーアプリです。

于 2008-10-02T15:56:17.370 に答える
2

他の回答に追加するには:

SICPコース(ビデオはここから入手できます)は素晴らしいので、Lispやその他多くのことを教えてくれます!

于 2008-08-26T09:53:07.057 に答える
2

キラーアプリ?Franz Inc.には成功事例の長いリストがありますが、このリストにはAllegroCLのユーザーのみが含まれています...おそらく他にもあります。私はクラッシュバンディクーゲームの大ファンだったので、私のお気に入りはノーティードッグについての話です。

Common Lispを学ぶには、PracticalCommonLispをお勧めします。それは、少なくとも私にとっては、私が見た他の本よりも簡単にした実践的なアプローチを持っています。

于 2008-08-26T10:03:05.940 に答える
2

Lisp は、従来のプログラミングを使用する場所ならどこでも使用できます。それほど違いはありませんが、より強力です。Web アプリを作成しますか? デスクトップアプリケーションを書いて、Lispでそれを行うことができますか? おそらくLisp、Python、またはその他の一般的なプログラミングで実行できます(1つのタスクのみに適した言語がいくつかあります)。

おそらく最大の障害は、上司、同僚、顧客に受け入れられることでしょう。それはあなたが彼らと協力しなければならないものです。JVM からライブラリーまで、Java インフラストラクチャーの現在のインストール・ベースを活用できるClojureのような実用的なソリューションを選択すると、役立つ場合があります。また、Java プログラムがある場合は、プラグイン アーキテクチャを作成してそのための Clojure プラグインを作成し、コードの半分を Clojure で作成することになります。

于 2008-11-26T14:41:44.593 に答える
2

現在、 Clojureを使用して、Java VM 上にテストとスクリプトを作成できます。JVM に実装されている Lisp 言語は他にもありますが、Clojure が Java との統合に最も適していると思います。

Java 言語自体が Java コード (「従来の商用プログラミング」を含む) のテストを作成する際に邪魔になる場合があります。(Java を非難しているわけではありません -- 他の言語も同じ問題に苦しんでいます -- しかし、それは事実です。Java ではなくトピックであるため、詳しくは述べません。 Clojure は、こうした障害の多くを取り除きます。

于 2008-09-15T15:16:51.730 に答える
1

これは私自身がしばらく考えてきたトピックですが、通常の時間が主な問題であるため、実際には決定に至っていません... ;)

この投稿ではこれらのリンクが見つからないため、公益のために追加します。

成功と失敗の物語: JPL での Lisping

本当に印象的なサクセス ストーリー: Orbitz 社で使用されている Lisp

Javaの代わりにLispを使用するかどうかの比較と分析: Lisp as an Alternative to Java

于 2008-08-20T11:21:05.380 に答える
1

理由ではありませんが、(些細なことですが) AutoCAD は LISP と DCL ランタイムをサポートしています。VBA やその C++ または .NET SDK を使用したくない場合、または DIESEL 式ではうまくいかない場合に、複雑なマクロ (ActiveX オートメーションを含む) を作成するのに便利な方法です。

AutoCAD の機能の多くは、実際には LISP ルーチンです。

于 2008-09-24T23:26:31.217 に答える
0

構文は関係ありませんが、読みやすさは関係ありません!

于 2008-08-12T11:59:37.350 に答える
0

これがキラーアプリだと言っているわけではありませんが、クールに見えるかもしれません http://code.google.com/p/plop/

于 2008-11-29T04:04:49.123 に答える
0

キラーアプリ?ITA Softwareのフライト検索エンジンはその一つです。

「なぜ」について言えば、それはあなたをより良い開発者にする可能性が最も高く、あなたをより悪い開発者にする可能性は非常に低いです. ただし、他の言語よりも Lisp の方言を好むようになるかもしれません。

于 2008-12-09T10:42:27.910 に答える