質問

多くのプログラマーとして、私は大学でPrologを研究しましたが、ほとんどだけではありません。 PrologとDatalogは密接に関連していることを理解していますが、Datalogはよりシンプルですか?また、Datalogはロジック条項の注文に依存していないことを読んだと思いますが、なぜこれが利点であるのかはわかりません。クリップはまったく異なると思われますが、理解できないほど微妙すぎます。誰かが他の言語で言語の一般的なハイライトを提供していただけませんか?

役に立ちましたか?

解決

DatalogはPrologのサブセットです。 Datalogが携帯するサブセットには2つのことを念頭に置いています。

  1. ルールとクエリをサポートするAPIを採用します
  2. すべてのクエリが終了することを確認してください

Prologは完全にチューリングを行っています。 Datalogはそうではありません。

Datalogを邪魔にならないようにすると、Prologがクリップとどのように比較されるかを見てみましょう。

Prologの専門知識は「問題解決」ですが、クリップは「専門家システム」です。私が正しく理解した場合、「問題解決」にはコードとデータを使用した専門知識が含まれます。 「エキスパートシステム」は、主にデータ構造を使用して専門知識を表現しています。見る http://en.wikipedia.org/wiki/expert_system#comparison_to_problem-solving_systems

それを見る別の方法は、次のとおりです。

エキスパートシステムは、ほとんどの(すべてではないにしても)結果が知られているという前提で動作します。これらの結果はすべてデータにまとめられ、エキスパートシステムに供給されます。エキスパートシステムにシナリオを与え、エキスパートシステムはコンパイルされたデータ、つまりナレッジベースからの結果を計算します。それは常に「偶数の数と偶数が常に偶数でさえあります」という一種の思考です。

問題解決システムには、問題の不完全な見方があります。したがって、データと動作のモデリングから始めます。これは、知識ベース(これは「コーナーケース」という用語に正義を与える)を構成し、「2〜6を追加すると8つになります。 2つ?それからそれは偶数です」

他のヒント

クリップとProlog/Datalogの違いは、クリップがによって動作する「生産ルールシステム」であるということです。 フォワードチェーン: :一連の事実とルールを考えると、新しい事実をあらゆる可能な導出を作成し、それらをメモリに保存しようとします。その後、クエリは、Factストアの何かと一致するかどうかを確認することにより回答されます。したがって、クリップでは、(pseudo-syntax)がある場合は:

parent(X,Y) => child(Y,X)
parent(john,mary)

すぐに派生します child(mary,john) そして、その事実を覚えておいてください。これは非常に高速になる可能性がありますが、可能なルールセットに制限を設け、メモリを取り上げます。

PrologとDatalogはによって動作します 後方チェーン, 、つまり、クエリ(Predicate Call)がクエリを証明しようとすることにより回答され、つまりProlog/Datalogプログラムを実行します。 Prologはチューリング完全なプログラミング言語であるため、任意のアルゴリズムを実装できます。

Datalogは、例えば、否定を許可しないPrologの非までの完全なサブセットです。その主な利点は、すべてのDatalogプログラムが終了することです(無限ループはありません)。これにより、いわゆる「演ductiveデータベース」、つまり事実に加えてルールを備えたデータベースに役立ちます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top