我可以在更短的时间内终止此CLP(FD)查询吗?

时间:2014-07-12 18:48:31

标签: prolog swi-prolog clpfd

我有以下CLP(FD)查询:

?- use_module(library(clpfd)).
?- [I,N,M,J] ins -2147483648..2147483647, 
I - 3*N #= X, X in 1..2, 
I - 5*M #= Y, Y in 1..4, 
I - 15*J #= 0.

在SWI-Prolog中已经在没有标签/ 1的情况下提出查询 目标,翻译几乎挂起。我不期待它 在短时间内终止。

如何修改查询,重新排序等等。所以 它提供了预期的答案" false"?

再见

P.S。:经过一段时间后按^ C和t后,我看到CLP(FD) 系统仍然很忙。

1 个答案:

答案 0 :(得分:4)

非常简单:

首先,将I替换为J*15;并把大域名放在最后:

?- 15*J - 3*N #= X, X in 1..2, 
   15*J - 5*M #= Y, Y in 1..4, 
   I #= 15*J,
   [I,N,M,J] ins -2147483648..2147483647.
false.

上述因素并不总是被检测到,因此传播很弱,因为它很容易炸毁域的表示。