繁体   English   中英

Prolog约束逻辑编程中的未知数顺序(clpr)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM