我有:
:-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,存在多种潜在的方程和不等式求解器。