我有:
:-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}谢谢!
发布于 2018-08-30 03:19:14
使用this模块可以更好地处理有限域上的约束:
:-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发布于 2018-08-27 07:51:36
这可能是使用的CLP(R)的一个弱点,即二次情况不能很好地工作。在Y= Z之后,很明显X= Y**2,然后当X=9且Y> 0时,您应该很容易得到Y= 3。您使用哪种CLP(R)?
CLP(R)不仅需要支持线性等式和不等式。例如,使用Gröbner基算法,CLP(R)可以做更多的事情,甚至在代数上。一些计算机代数系统可以很容易地做到这一点。
所以我猜这不是Prolog本身的问题,而是库的问题。严格地说,CLP( X )只表示一个域X。对于实数域R,有各种各样的位势方程和不等式求解器。
https://stackoverflow.com/questions/52028079
复制相似问题