我有:

:-use_module(library(clpr)).
comp(X, Y, Z):-
    {X = Y * Z, Y = Z, Y > 0, Z > 0}.


与哪个查询:

?-comp(X,3,Z).


产量:

X = 9.0,
Z = 3.0


如预期的那样。但是为什么不

comp(9,Y,Z).


还给我Y和Z的值吗?我得到的是:

{Z>0.0,Y=Z,9-Y*Z=0.0},
{9-Y*Z=0.0},
{9-Y*Z=0.0}


谢谢!

最佳答案

可能是二手CLP(R)的弱点,即二次大小写不能很好地工作。在Y = Z之后,很明显X = Y ** 2,然后在X = 9且Y> 0的情况下,您很容易得到Y =3。您使用哪个CLP(R)?

CLP(R)不仅需要支持线性等式和不等式。使用例如GröbnerBasis算法,CLP(R)甚至可以做更多的代数运算。一些计算机代数系统可以轻松做到这一点。

因此,我想这本身不是Prolog的问题,而是库的问题。严格来说,CLP(X)仅表示域X。对于实数域R,存在多种潜在的方程和不等式求解器。

07-24 09:45