質問

読んでいくと 制約ロジックプログラミング, SQL プログラミングとの明らかな関係に気付かずにはいられません。SQL は実際の「制約ロジック プログラミング」の一例ですか?

役に立ちましたか?

解決

彼らはハイレベルから非常によく似ています。両方のではなく、反復よりも、宣言またはセットベースです。(あなたが欲しいものを求める意味 - あなたがいない個々の項目を通って、プロセスループ一つずつ)

CLPは、SQLでモデル化することができますが、それは問題のより良い解決策を求める場合です。 SQLはすでに明示的に定義されて与えられたデータセットの答えを見つけるための良いです。 CLPが緩くあるいは時にはさえ完全に定義されていないドメインで答えを見つけるために良いです。

例として、

。私はSQLを使用してI 1と千万の間のすべての偶数を返すようにしたい場合(既存のデータセット)から選択することが記載されているすべての数字を持つテーブルが必要になります。 CLP Iを使用すると、ちょうどバインド(10M)を必要とするだろうが、明示的にすべてのレコードを作成していないでしょう。

内部CLPエンジン(CSPの問題は)また、彼らはより高速にするために制約を推測することができます。 SQLは、あなたはこれらのルールを把握し、それらを明示的に述べる必要があります。たとえば、あなたのSQLは、A、BおよびB = C =は、CLPエンジンはどこSQLではないでしょうA = Cと使用がより速く実行するには、そのことを把握可能性がある場所であれば。彼らすることができます同様にだけでなく、最適化の実行時にドメイン(私も数字が返されることはありませんことを知っていればCLPは考慮からそれらをスローします - SQLは、まだそれらを検討しますが、「ソリューション」と返していない)推論ます。

うまくいけばできます - あなたがそれを必要とする場合、私はより多くの技術的な取得することができます。覚えておくべき重要な点は、2つの似ていますが、問題のモデルに依存するあなたが使用しています。あなたが言うことができる場合は、「これらは私の変数であり、これらがどのように相互関係している、私に任意の有効な解決策を与える」その後、CLPは良い候補です。あなたが言うことができる場合は、SQLが良い候補である「私の変数があり、これらは仕様です、私はフィットがいることを私の既存のデータのサブセットを返せ」ます。

他のヒント

完全な答えはありませんが、Datalog と DLV を調べると興味深いかもしれません。これらはおそらく、ロジック プログラミング (CLP ではありません) と SQL の間の「ミッシング リンク」であり、物事をより明確に理解するのに役立ちます。

これは CLP よりも LP に関するものなので、何かを見逃しているかもしれません - もしそうなら、ごめんなさい。

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