多くのプログラマーと同じように、私は大学でPrologを勉強しましたが、ごくわずかです。PrologとDatalogは密接に関連していることを理解していますが、Datalogの方が簡単ですか?また、Datalogは論理句の順序に依存しないことを読んだと思いますが、なぜこれが利点であるのかわかりません。CLIPSはおそらく完全に異なっていますが、私には理解できないほど微妙です。誰かが他の言語よりも言語の一般的なハイライトを提供してくれませんか?
2 に答える
CLIPSとProlog/Datalogの違いは、CLIPSは前向き連鎖によって動作する「本番ルールシステム」であるということです。一連のファクトとルールが与えられると、新しいファクトの可能な限りの派生を作成し、それらをメモリに保存しようとします。次に、ファクトストア内の何かと一致するかどうかを確認することにより、クエリに回答します。したがって、CLIPSでは、(疑似構文)がある場合:
parent(X,Y) => child(Y,X)
parent(john,mary)
それはすぐにchild(mary,john)
その事実を導き出し、記憶します。これは非常に高速ですが、可能なルールセットに制限を課し、メモリを消費します。
PrologとDatalogは後向き連鎖によって動作します。つまり、クエリ(述語呼び出し)は、クエリを証明しようとすることによって、つまりProlog/Datalogプログラムを実行することによって応答されます。Prologはチューリング完全プログラミング言語であるため、任意のアルゴリズムを実装できます。
Datalogは、否定などを許可しないPrologの非チューリング完全サブセットです。その主な利点は、すべてのDatalogプログラムが終了することです(無限ループがありません)。これにより、いわゆる「演繹データベース」、つまりファクトに加えてルールを含むデータベースに役立ちます。
datalogはprologのサブセットです。データログが保持するサブセットには、次の2つの点があります。
- ルールとクエリをサポートするAPIを採用する
- すべてのクエリが終了することを確認してください
プロローグはチューリング完全です。データログはそうではありません。
データログを邪魔にならないようにして、プロローグがクリップとどのように比較されるかを見てみましょう。
プロローグの専門知識は「問題解決」であり、クリップは「エキスパートシステム」です。私が正しく理解していれば、「問題解決」にはコードとデータを使用した専門知識が含まれます。「エキスパートシステム」は、主にデータ構造を使用して専門知識を表現します。http://en.wikipedia.org/wiki/Expert_system#Comparison_to_problem-solving_systemsを参照してください
それを見る別の方法は次のとおりです。
エキスパートシステムは、ほとんど(すべてではないにしても)の結果がわかっているという前提で動作します。これらの結果はすべてデータにまとめられ、エキスパートシステムに送られます。エキスパートシステムにシナリオを与えると、エキスパートシステムはコンパイルされたデータ、別名ナレッジベースから結果を計算します。それは常に「偶数と偶数は常に偶数である」という考え方です。
問題解決システムは、問題の不完全な見方をしています。したがって、知識ベースを構成するデータと動作のモデリングから始めて(これにより、「コーナーケース」という用語に正義が与えられます)、「2を6に加えると、8になります。8はで割り切れます。二人?それならそれでも」