[英]Order of unknowns in Prolog constraint logic programming (clpr)
我有:
:-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,存在各种各样的潜在方程和不等式求解器。
使用此模块更好地限制有限域:
:-use_module(library(clpfd)).
comp(X, Y, Z):-
X #= Y * Z, Y #= Z, Y #> 0, Z #> 0.
同
comp(9,Y,Z).
我明白了:
Y = Z, Z = 3
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.