LISPはAIのほとんどの言語よりも優れているという長い間信じられてきた信念があります(主に無口論者による)。
この信念はどこから来たのですか?そして実際にそれに何らかの根拠はありますか?
LISPに似た言語と他の言語の主な違いの1つは、LISPではコードとデータが同じであることです。これにより、プログラムは実行時に、言語のネイティブな部分として新しいことを「学習」するときに、そのアルゴリズムの一部をプログラムに変更させることができます。
これに入るもう1つの側面は、それほど多くはありませんが、マクロを介して新しい言語セマンティクスを簡単に追加できるLISPの機能です。これにより、AIが動作し、進化することができるDSLを実際に行って定義することが可能になり、AIの実行中にその言語が成長、自己修正、および進化する可能性があります。
Quadrescenceに同意すると、LISPの使用履歴は、AIに適しているというLISPのイメージに大きく貢献します。 LISPがAIに使用される理由 は、履歴をより詳細にカバーしています。
LISPの最初のプログラムには、定理証明、記号数学、古典的なELIZAなどがありました。PeterNorvigのPAIPのような本に加えて、LISPがMIT AIラボでは、LISPがAIに適しているというイメージが得られました。
DARPAはまた、AIの研究のために大学に資金を提供し、Symbolicsから大量のハードウェアを購入しました。資金不足は、結局、いわゆる「AI冬」につながりました。
最後に、Fortran(またはASMのような「言語」)のような元の言語が、数値計算に主に使用されました。あなたはそれらの数と配列を扱いました。最近では、ほとんどの現代の言語で、シンボル、つまり私たちが望むほとんどすべてのオブジェクトを作成する機能があります。
したがって、一度にLISPがAIに対して優れていた理由は、もはや当てはまりません。ただし、「LISPはAIに適している」という考えはまだ残っています。
LISPがその機能と構造のために優れた言語であるかどうかは、まったく別のケースです(実際、この種のことはAI以外の多くの領域に当てはまり、通常は古い炎の戦争につながります)。
現在のAIプログラムをいくつか見てみましょう:(1)ロボット、たとえばセルフドライブ車。 DARPAのグランドチャレンジでは、優れた自動車運転ソフトウェアはLISPではありませんでした。むしろ、C++やJavaなどの手続き型言語でした。 (2)自然言語の機械翻訳。 LISPは、広く使用されているプロダクションシステムではこの目的には使用されません。 (3)ゲームプレイ、例えばチェスプログラム。 LISPは、フリッツなどの広く使用されている優れたチェスプログラムでは、この目的には使用されません。
LISPは、ネイティブLISPデータ構造が必要なシンボリック抽象化のレベルに適合するシンボリックロジックプログラムを迅速にプロトタイプ化するために、1960年代にUS AIラボによって発明および開発されました。英語の単語はリスト内の記号であり、論理式は演算子とオペランドのリストとして簡単に表すことができます。
しかし、プロダクションプログラムの場合、静的型付き言語とさまざまなサードパーティライブラリのソフトウェアエンジニアリングの利点により、LISPはAIタスクを実行する大規模な最新システムについてさえ考慮されていません。
@Stephen Reedはそれをとてもよく言った。 MIT AIラボの70年代であったことだけを追加できます。その後、LISPの起源についての話を聞きました。それが本当であるとは言えませんが、次のようになります。
John McCarthyは50年代にMIT=でした。彼はプログラムのプロパティの証明に取り組んでおり、そのために彼はLambda Calculusに似た単純な構文を使用していました。
物語は、大学院生の1人がプロジェクト(アナロジー、定理証明、または象徴的な数学、どちらか覚えていません)を実行したいと思っていて、マッカーシーに使用する言語を尋ねたというものです。答え-もちろんFortran。 (他に多くはなく、リスト処理自体は当時はかなりよく知られていましたが、言語としてではなく、サブルーチンパッケージとしてのみでした。)なんとかして、ネストされたリスト構造のシンボルを処理するプログラムになりました。それらを読み取って印刷する方法、そしてeval
関数、そしてVoila '-言語とともに。 LISt処理言語。そこから離陸しました。
当時私たちが行っていた種類のアルゴリズム(そして、まだ非常に少数の人々が行っていること)のために、記号式を簡単に操作できる言語が必要でした。それがLISPの得意分野です。基本的なコンセプトには多くのバリエーションがあり、Prolog、Schemeなどのようにさまざまな名前が付けられています。
したがって、AIは多くの人にとって多くのことを意味し、異なる言語は異なるものに適していますが、シンボル操作として説明できる問題については、LISPから派生したものではない有用な言語を見つけるのは困難です。
LISPには、AIと呼ばれていたものの種類、少なくとも90年代までAIの大部分を占めていたロジック、検索、解析に関する利点があります。
LISPの主な利点は、マクロ(データとしてのコード、メタプログラミング)のサポートです。
標準ML(SML)は、たとえば80年代以降、AIで広く使用されている別の言語です。客観的なCAMLとF#はSMLの進化形です。
MLファミリー(およびHaskellなど)の主な利点は、パターンマッチングです。これはおそらくLISPでも利用できますが、言語に組み込まれているのではなく、メタプログラミングライブラリを介して行われます。 Haskellでも利用できますが、少なくとも現時点では、関数型プログラミング言語以外ではパターンマッチングは一般的ではありません。
私は、LISPが基本的に拡張された型なしラムダ計算であり、MLが基本的に拡張された型付きラムダ計算であるという主張を見てきました。確かに、型付きラムダ計算についての知識はありません。
AIはまた、長年にわたってより広範な主題となっており、AIはほぼ完全に消滅しています。データマイニングは、AIの1つのサブフィールドと見なすことができます。多くのAIの事柄(OCR、スピーチ認識)は、AIになることをほとんど止めています-それらは他のすべてと同じように、単なるアプリケーションです。 AIは、以前よりも信号処理やその他の種類の数値処理に大きく依存しています。
もちろん、OCRと音声認識では、AIは常に信号処理と数値処理に依存していました。はい、これにはいくつかの矛盾があります;-)私は本当に分からないので、物事の重みを与えることができません。
とにかく、結果として、1つの最新のAIアプリケーション全体にさえ適切な単一の言語はおそらくないでしょう-現代のAIには多くの多言語開発があると思います(直接の知識はありません)。そして、私はあなたがいくつかのプロジェクトでCとC++を見つけることをほぼ保証できます。同様の理由でPythonがたくさんあるとしても、私は驚くことではありません。優れた数値ライブラリがあれば、Pythonは数値計算タスクを簡単に処理できます。
これらの自動運転車の1つでは、ビジョンシステムがルートプランニングシステムとは異なる言語で記述されている(そして異なるハードウェアで実行されている)と想像します。