0
以下のルールは交差をチェックします。
アンサーセットプログラミングで2つの長方形間の交差を確認する
:- areaCoords(X1,Y1,X2,Y2), areaCoords(XA,YA,XB,YB), XA >= X1, X2 >= XA, YB >= Y1, Y2 >= YA, (X1,Y1,X2,Y2) != (XA,YA,XB,YB).
ただし、対称ペアが生成されます。つまり、交差点(A、B)と交差点(B、A)があるかどうかを確認するのは明らかですが、チェックの1つは簡単です。私は地雷でそれを検出した。ここにgrounderの出力があります。
:-areaCoords(1,1,1,1),areaCoords(1,1,2,2).
:-areaCoords(1,1,2,2),areaCoords(1,1,1,1).
対称ケースが発生しないようにするにはどうすればよいですか?
問題が他の場所にある場合は、これらのルールを生成する完全なソースを提供します。
編集:以前のバージョン(完全なソース)は、他の人たちが公約に来るのが非常に複雑だと思いました。だから私はそれを簡略化した。このコードは、上記の問題を引き起こします。代わりに対称制約を防ぐ必要がある不平等の<
のチェック
{ areaCoords(1,1,1,1); areaCoords(1,1,2,2) }.
:- areaCoords(X1,Y1,X2,Y2), areaCoords(XA,YA,XB,YB), XA >= X1, X2 >= XA, YB >= Y1, Y2 >= YA, (X1,Y1,X2,Y2) != (XA,YA,XB,YB).