私は何年も前に大学でプロローグを学びました。私の職業生活の間、私はPrologを使用する必要がありませんでした。何か特別なものを見逃していませんか?
私が覚えている限り、Prologは著名なプログラミング言語と比較してまったく異なる考え方を必要とします。
プロローグは、専門的に有用なものを実装するために本当に使用されていますか?
私は何年も前に大学でプロローグを学びました。私の職業生活の間、私はPrologを使用する必要がありませんでした。何か特別なものを見逃していませんか?
私が覚えている限り、Prologは著名なプログラミング言語と比較してまったく異なる考え方を必要とします。
プロローグは、専門的に有用なものを実装するために本当に使用されていますか?
回答:
私の考えでは、Prologの基礎を学ぶことは、あなたが現実の世界でPrologを使用するかどうかに関係なく、非常に価値があります。また、統合の根底にある基本的な考え方、および(些細で非効率的な)実装の処理方法を理解することも非常に価値があります。
宣言型ロジックを使用して最適に解決される問題がある場合、理想的にはそれを認識し、(選択できる場合)そのジョブに適切なツールを使用することを知っておく必要があります。
しかし、Prologには従来の命令型言語とは非常に異なる考え方が必要であり、関数型言語とは非常に異なる考え方も必要であることに同意します。ある点を超えて、それは多くの経験を必要とするように見えます(何かと同じように)。そして、私の脳を私の耳から垂れさせる多くの「教科書」の知識さえあります。
私の印象は...おそらく私たちは両方ともある程度特別なものを見逃しているかもしれませんが、現実世界の経験を開発しようとすることはもちろん、Prologのかなり完全な教科書レベルの知識を学ぶ時間を捧げることは実用的ではありません、可能性のあるロジックプログラミングのキャリアを検討している場合を除きます。
最近、1989年に出版されたAIとエキスパートシステムに関する本を読んでいます。古本屋での幸運な発見です。重要な部分は、LispとPrologに関する専門的なチュートリアルです。確かに、それがカバーするもののほとんどは、しばらくの間それほど印象的ではありませんでしたが(検索、ヒューリスティックなど)、それでも非常に興味深いものであり、IMOは少し時間をかける価値のあるものです。
Prologを具体的に説明している最近の本は、言語の学習には適していますが、リスクは、中級から上級の教材のどこかであなたの脳が耳から滴り落ちることです。
これは私ではありませんでしたが、「プロローグで何か深刻なものを実装した人はいないだろうか?」これは重要かもしれません:
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を使用してデプロイおよび統合されています。
私はAIプログラマーがそれを使用することを知っています.....私はAIクラスでPrologコースを受講しましたが、それ以外はそれについて他に多くのことを言われていません。よくある質問と同様の質問があります! /programming/130097/real-world-prolog-usage
私はPrologを(重要な)ほんの一握りの機会(診断エキスパートシステム、HTML変換、セットメンバーシップ)で専門的に使用しました。私は言語に深い愛情を持っているので、はい、ここにはバイアスがありますが、Prologがいつ(より/ちょうど)適切であるかについて客観的であるのは簡単です-あなたは本当に再帰構造を処理する必要があります; 私が提供できる最良の例はリレーショナルデータベーステーブルですが、他にも数え切れないほどの例があります(ランダムなユーザー入力や(ほとんどの)数学関数(ただし、多くの数学関数には再帰構造があるため、完全に適切です(たとえば、離散高速フーリエ変換)。
しかし、もちろん、再帰構造の処理だけで定義できる「エンドツーエンドシステム」はほとんどありません(例外:定理証明-しかし、これはかなりアカデミックな演習です*)。あらゆる種類の異なる手法を使用して、「より標準的な必須プロセス」につなげることができます(Webサービスインターフェイスが一般的に適している以外はほとんど問題になりません)。そのため、UI、ランダムイベント処理などを処理し、必要に応じて引き渡すことができます(複雑なデータベースクエリや、再帰構造を使用してやりたいことを行うため)。たとえば、LINQよりも美しく動作します。
繊細なビットで再帰構造をつかみ、素敵できれいでエレガントで保守可能なPrologを書きましょう!:)
PS Prologを使用していないとき、C#にフォールバックします