いいえ、それらとneo4jによって具現化された論理プログラミングはまったく異なります。
あるレベルでは、それらが概念的にグラフ ストレージとグラフ クエリの両方に相当することは正しいです。しかし、論理プログラミングの場合、それは概念的にはグラフ クエリにすぎず、実際にそのように格納されているという保証はありません (neo4j の場合はそうです)。
第 2 に、ロジック プログラミングでは、通常、多くのデータから推論できるホーン句を確立しようとします。角節は、「ある人が男性であり、生物学的な子供の直接の祖先である場合、それはその人が父親であることを意味する」のような単純なルールと考えることができます。neo4j を使用した cypher では、一致させたいグラフ パターンを記述します。これにより、データが得られます。たとえば、次のようになります。
MATCH (p:Person)-[:father*]->(maleAncestor:Person)
RETURN maleAncestor
これは、関係によってグラフをトラバースし、father
男性の祖先を返すように指示します。論理プログラミング言語では、このようにはしません。a
の父であるb
ことa
は、男性でありa
、 の祖先であることを意味する場合がありますb
。これは、すべての有効な a/b ペアリングについて暗黙的かつ推移的に述べます。それから、「男性の祖先は誰ですか?」と質問します。プログラミング環境は、ルールを利用してそれに答えます。これは、上で指定した暗号と非常によく似たデータを介してトラバーサルを構築する効果がありますが、データを理解し、そのトラバーサルを構築する方法はまったく異なります。
ロジック プログラミング言語は通常、述語の解決を通じて機能します。cypher のようなグラフ クエリ言語は、パターン マッチングと明示的なパス指定の組み合わせによって機能します。彼らは非常に異なっています。