問題タブ [prolog-dif]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
237 参照

prolog - allDifferent/6述語を表現するには?

{ 1, 2, 3, 4, 5, 6} 内の∀ i , jallDifferent(A, B, C, D, E, F)の場合に限り、 i番目とj番目の引数がi = jの場合にのみ単一化されます。

したがってallDifferent(3, 1, 4, 1, 5, 9)、間違っていますが、allDifferent(3, 1, 4, 2, 5, 9)本当です。

allDifferent/6Prologでどのように実装しますか?

A特に、6-choose-2 = 15 の不等号≠ BAC、 ...、EF(または、むしろ、それらの Prolog レンディション)をリストする必要がないことを表現する方法はありますか?

0 投票する
1 に答える
270 参照

prolog - Prolog の平等と統一について何が欠けていますか?

私は、Clocksin と Mellish に取り組んでおり、最終的に Prolog に手を出すだけではありません。FWIW、私はSWI-Prologを実行しています:

x86_64-linux 用の SWI-Prolog バージョン 7.2.3

とにかく、演習 1.4 の一部として diff/2 述語を実装しました。述語は非常に単純です。

これは、次のように、sister_of 述語で使用すると機能します。

その中で、必要な追加の事実を仮定して、これを行います:

期待どおり false を返します。しかし、ここに問題があります。代わりにこれを行うと:

(繰り返しますが、必要な追加の事実を考えると)私は得ます

誰=エドワード。

誰 = アリス;

間違い

ただし、既に示したように、sister_of 述語は alice を自分の姉妹として扱いません。

一方、SWI が提供する dif/2 述語を使用すると、単純に期待したとおりにすべてが機能します。

そのクエリから追加の統合を要求した場合、なぜこれがこのように起こっているのか、なぜ私の差分実装が期待どおりに機能しないのかを誰かが説明できますか?

私が扱っているソースファイル全体はここにあります

どんな助けでも大歓迎です。