AIプログラミングで使用されていると聞いたため、視野を広げるためにLISPを学んでいます。いくつかの探索を行った後、私はまだAIの例や、それをもっと好むような言語の何かを見つけていません。
LISPは利用可能であったために過去に使用されていましたか、それとも私がちょうど見逃しているものがありますか?
LISPは1980年代の終わりまでAIで使用されていました。ただし、80年代には、Common LISPは「AI言語」としてビジネス界に売られすぎていました。この反発により、ほとんどのAIプログラマーは数年間C++に追い込まれました。最近では、プロトタイプは通常、より若い動的言語(Perl、Python、Rubyなど)で記述され、成功した研究の実装は通常CまたはC++(Javaの場合もあります)で行われます。
70年代に興味があるなら...私はそこにいませんでした。しかし、LISPは次の3つの理由でAI研究に成功したと思います(重要度の高い順に)。
Peter Norvigの古いAI本 はありませんが、LISPでAIアルゴリズムをプログラムすることを学ぶのに良い方法であると思われます。
免責事項:私はコンピューター言語学の大学院生です。自然言語処理のサブフィールドは、他のフィールドよりもずっとよく知っています。たぶん、LISPは他のサブフィールドでもっと使われています。
LISPがAIに使用されるのは、シンボルを使用して計算するソフトウェアの実装を非常によくサポートしているためです。シンボル、シンボリック式、およびそれらを使用した計算は、LISPの中核です。
シンボルを使用したコンピューティングの典型的なAI分野は、コンピューター代数、定理証明、計画システム、診断、書き換えシステム、知識表現と推論、論理言語、機械翻訳、エキスパートシステムなどです。
これらのドメインの有名なAIアプリケーションの多くがLISPで記述されていても驚くことではありません。
これらの領域には、LISPで記述された何千ものアプリケーションがあります。それらに非常に一般的なのは、シンボリック処理の分野で特別な機能が必要なことです。 1つは、LISPの上にこれらのドメインで特別なインタープリター/コンパイラーを持つ特別な言語を実装します。 LISPを使用すると、シンボリックデータおよびプログラムの表現を作成でき、これらの式(数式、論理式、計画など)を操作するためのあらゆる種類の機械を実装できます。
(他の多くの汎用プログラミング言語もAIで使用されていることに注意してください。特にLISPがAIで使用されている理由に答えようとしました。)
理由の1つは、ドメイン固有の構成体で言語を拡張し、ドメイン固有の言語にすることです。この手法は非常に強力です。 問題 あなたはビットをシャッフルするのではなく、解決しています。
私の推測では、関数型言語であるため、コードとデータを区別していません。関数定義や関数呼び出しなど、すべてをリストとして扱い、他のデータと同様に変更できます。
したがって、自己検査、自己修正コードは簡単に記述できます。
考えられる答えの1つは、AIは非常に難しい問題の集合であり、LISPはAIだけでなく難しい問題を解決するための優れた言語であるということです。
その理由については、マクロ、汎用関数、および豊富なイントロスペクションにより、簡潔なコードとドメイン抽象化の簡単な導入が可能になります。これは、より強力にできる言語です。多くの問題は不要であり、独自のコストが伴いますが、他の問題では前進するために電力が必要です。
これをAIだけで考えるのは間違っていると思います。 AIの冬や一般的なLISPの商業効果などは、現在AIが頻繁に使用されていない理由ではなく、なぜAIに使用されているのかを尋ねると気が散ります...
とにかく、ほとんどのAIコードが本質的に研究コードだったからだと思います。 LISPは、探索的プログラミング、困難なアルゴリズムの実装、自己修正および頻繁に修正されるコードのための優れた言語です。言い換えれば、研究コード用です。
現在、ほとんどの言語よりも柔軟で強力でありながら、ほとんどの言語よりも効率的なコードを生成するため、研究コードの一部(数学、信号処理)にLISPを使用しています。通常、C++の速度の+/- 2倍以内でパフォーマンスを得ることができますが、より高速に実装でき、C++、Java、C#を使用した場合よりもはるかに時間がかかる複雑さに対処できます。
しかし、それは話題をさまよっています。 AIコードは、コードを研究するための強力なアプローチであるため、主にしばらくの間、一般的なLISPで記述されたと思います。まだです。しかし、「AI」アルゴリズムの理解と調査が進むにつれて、それらの一部は教えることも使用することもはるかに簡単になったため、学部課程の年間学習言語で登場しました。そこから、それは人々がすでに知っていること、利用可能なライブラリ、そして大規模なグループに適したものの問題になります。
大きな理由は、基本的なデータ構造としてのリストの柔軟性にあると思います。
当時、それらをあらゆる種類の複合オブジェクトに変えることができ、メッセージパッシングやポリモーフィズムなどの新しいものが選択言語になりました。特にAI向けではなく、大きく複雑なタスク向けです。特に彼らが概念を実験していたとき。
関数型言語であるLISPは、再帰アルゴリズムを実装するのに非常に良い選択だったと聞いたことを覚えています。意思決定プロセス(トラバーサル)と最終結果(リーフノード)を検討するときは、ツリーを追跡して元に戻ることができることが不可欠です。
これは、私たちがLISPを勉強した大学のAIコースで教えられました。
あなたは正しいと思います:LISPは物事をハッキングするための便利なツールでした。これは、プログラムとデータをあまり区別しなかったためです。これにより、ハッカーはデータのように非常に簡単に機能を操作できました。
しかし、LISPは中括弧があり、データとプログラムを区別しないため、人間が読むのは非常に困難です。今日、私はプロダクションAIコード(またはプロトタイピング)にLISPを使用しませんが、スクリプトにはpythonを好むでしょう。
考慮すべきもう1つのことは、言語に関連する既存のライブラリ/ツールです。私はLISPライブラリをpythonライブラリと比較する立場にありませんが、ライブラリとオープンソースの問題は以前よりもはるかに重要になっていると思います。
この回答は、LISPとpythonの次の比較に触発されました。 http://amitp.blogspot.com/2007/04/LISP-vs-python-syntax.html
もっと皮肉な答えは「1980年代に日米間の政治的AI戦争に敗れたから」かもしれません。楽しいものがあります 第5世代コンピューターシステムの崩壊がPrologに与える影響について推測するブログ投稿 。