3

私は持っている:

:-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}

ありがとう!

4

2 に答える 2

2

おそらく、使用されている CLP(R) の弱点は、2 次ケースがうまく機能しないことです。Y = Z の後、X = Y**2 であることは明らかであり、X = 9 および Y > 0 の場合、Y = 3 を簡単に取得できるはずです。どの CLP(R) を使用しますか?

CLP(R) は、線形の等式と不等式をサポートする必要があるだけではありません。たとえば、Gröbner Basis アルゴリズムを使用すると、CLP(R) は代数的にもさらに多くのことを行うことができます。一部のコンピューター代数システムでは、これを簡単に行うことができます。

したがって、ライブラリの問題ではなく、Prolog自体の問題ではないと思います。厳密に言えば、CLP(X) はドメイン X のみを示します。実数のドメイン R には、さまざまな方程式および不等式のソルバーが考えられます。

于 2018-08-26T23:51:35.717 に答える