私は何年も前に大学でプロローグを学びました。私の職業生活では、Prologを使用する必要はありませんでした。何か特別なものを見逃しましたか?
私が覚えている限り、Prologは著名なプログラミング言語と比較して完全に異なる考え方を必要とします。
Prologは本当に専門的に有用なものを実装するために実際に使用されたことがありますか?
私の見解では、Prologの基本を学ぶことは、実際にそれを使用するかどうかに関係なく、非常に価値があります。また、統合の基礎となる基本的な考え方と、(些細で非効率的な)実装がどのように処理されるかを理解することも非常に価値があります。
宣言型ロジックを使用して解決するのが最善の問題がある場合は、そのことを認識し、そのジョブに適切なツールを使用することを選択できる場合はそれを知っている必要があります。
ただし、Prologには従来の命令型言語とはまったく異なる考え方が必要であり、関数型言語とはまったく異なる考え方も必要であることに同意します。特定のポイントを超えると、(他の場合と同じように)多くの経験が必要となるように見え、脳が私の耳から飛び散るようにする「教科書」の知識さえもたくさんあります。
私の印象は...私たちはおそらく両方ある程度特別なものを欠いていますが、Prologの合理的な完全な教科書レベルの知識さえ学ぶために時間を費やすことは現実的ではありません可能なロジックプログラミングのキャリアを検討しているのでない限り、実際の経験を発展させようとします。
私は最近、1989年に出版されたAIとエキスパートシステムに関する本を読んでいます。古本屋でのラッキーな発見です。重要な部分は、LISPとPrologに関する特別なチュートリアルです。確かに、カバーする内容の大部分はかなり長い間(検索、ヒューリスティックなど)印象的ではありませんでしたが、それでも非常に興味深いものであり、IMOに少し時間を費やす価値のあるものです。
プロローグを具体的に説明している最近の本は言語を学ぶのに適していますが、その場合、リスクは中級から上級の資料のどこかであなたの脳があなたの耳から滴り落ちるということです。
これは私ではありませんでしたが、「誰かがプロローグを使って何か深刻なことを実装したのではないか」という質問であると想定しました。これは数えるかもしれません:
http://asmarterplanet.com/blog/2011/02/the-watson-research-team-answers-your-questions.html
Watsonは、Linuxを実行する10ラックのIBM Power 750サーバーを搭載し、15テラバイトのRAM、2,880プロセッサーコアを使用し、80テラフロップで動作することができます。 Watsonは主にJavaで書かれていますが、コードのかなりの部分もC++とPrologで書かれており、すべてのコンポーネントはUIMAを使用して展開および統合されます。
知ってるプログラマーがそれを使う.....私は自分のA.I.クラスですが、他に私が他の人がそれについて言ったことを見たことはありません。これは、lotsaの回答を持つ同様の質問です! https://stackoverflow.com/questions/130097/real-world-prolog-usage
Prologは高速プロトタイピングに最適です。たとえば、 http://www.cri.ensmp.fr/classement/doc/A-381.pdf では、GCCのSSA変換が最初にPrologに実装され、次にCに実装されます。
コンパイラーの内部でPrologを使用して、型システムの迅速でダーティーな実装、特定の最適化、およびセマンティックチェックを行っています。パフォーマンスが許容できない場合にのみ、Prologコードを命令型に書き換えます。
あなたはすぐに答えましたが、私は90年代半ばにPrologを使用して、保険料率に適合する特定の顧客セグメント(読み取りリスク)を決定する保険率計算機を設計しました。これは必ずしも毎日見られるとは限りませんが、P&Cの保険料に何年にもわたって影響を与えてきたことは確かです。
(このFAQ) 1 によれば、Jeopardyを実行したIBMマシンであるWatsonの一部は、プロローグで書かれています。 (質問6を参照)
私はPrologを(重要な)少数の機会(診断エキスパートシステム、HTML変換、セットメンバーシップ)で専門的に使用しました。私は言語に深い愛情を持っているので、はい、ここにバイアスがありますが、Prologが適切であるとき(より/ちょうど)に客観的になるのは簡単です-あなたは本当に処理する必要があります再帰構造;私が与えることができる最良の例はリレーショナルデータベーステーブルですが、他にも無数の例があります(ランダムなユーザー入力や(ほとんどの)数学関数などの反例を列挙する方が簡単です(ただし、多くの数学関数には再帰構造があるため、完全に適切です(たとえば、離散高速フーリエ変換))。
しかしもちろん、再帰的構造の処理に関してのみ定義できる「エンドツーエンドシステム」はほとんどありません(例外:定理証明-しかし、これはかなり学術的な演習*)。したがって、プロローグプロセスは幸いです。あらゆる種類のさまざまな手法を使用して、「より標準的な命令型プロセス」に移植することができます(Webサービスインターフェイス以外はほとんど問題になりません)。そのため、UIやランダムなイベント処理などを処理し、必要に応じて引き渡すことができます(複雑なデータベースクエリや、再帰的な構造で実行したいあらゆることを行うため)。 LINQよりも美しく機能していることがわかりました。
敏感なビットで再帰的な構造をつかみ、素敵で、きれいで、エレガントで、メンテナンス可能なPrologを書いてください! :)
PS Prologを使用していないときは、C#にフォールバックします
自分の好きな言語で数独ソルバーを書いてみて、それがPrologでどのように行われているかを確認してください。一般に、CLPの問題はすべて、Prologのような宣言型言語を使用して、Niceに適しています。
また、ハードウェアとソフトウェアの正式な検証でも広く使用されています(学問的およびおそらく専門的ですが、企業への言及はありません)。
最後に、Erlangは、フォールトトレランスと同時実行性を念頭に置いて、Prologに深く影響されています。
米国および他のいくつかの国でメールの多くを読み取って分類するソフトウェアは、高度に最適化されたコンパイラーを使用して、Prologで作成されています。メールアドレスの構文は明確な文法で記述されているため、メンテナンスが容易になり、リーダーをさまざまな国や産業ユーザーの規則に適合させることが簡単になります。郵便サービスには、転送先の住所、私書箱と番地の比較など、複雑な一連のルールが含まれていることが多く、これらのルールもメンテナンスを容易にするためにPrologで作成されています。