我正在使用 SWI-Prolog,我很新,还在学习。实际上,这个问题是对为什么我的规则不能在一个简单的代数方程中求解 X的后续问题?
我已经导入了 clpq。
?- use_module(library(clpq)).
true.
我的方程是6x 2 + 7x - 3 = 0,其中 x 实际上是-1.5或者如果使用二次方程,也是1/3 。
?- {(6 * X ^ 2) + (7 * X) - 3 = 0}.
{-3+7*X+6*X^2=0}.
?- {(6 * X ^ 2) + (7 * X) - 3 = 0}, R is float(X).
ERROR: is/2: Arguments are not sufficiently instantiated
好吧,它通过将 3 的减法更改为 -3的加法来稍微简化了方程,但它没有解决. 我的第一步是尝试给出答案并查看它是否接受。X
?- X is -1.5, (6 * X ^ 2) + (7 * X) - 3 =:= 0.
X = -1.5.
嗯……那里的一切看起来都很好。为了完整起见,我还运行了二次方程。(“方程式”复数,因为我猜 Prolog 中没有±运算符。至少,我找不到。)
?- A is 6, B is 7, C is -3, X is (-B + sqrt((B ^ 2) - (4 * A * C))) / (2 * A).
A = 6,
B = 7,
C = -3,
X = 0.3333333333333333.
?- A is 6, B is 7, C is -3, X is (-B - sqrt((B ^ 2) - (4 * A * C))) / (2 * A).
A = 6,
B = 7,
C = -3,
X = -1.5.
好吧,一切似乎都结束了。那么,为什么 cplq 不能解出我的方程呢?