我编写了一个用类似术语解决方程式的代码(例如: - x ^ 2 + 5 * x + 6 = 0)。这里'x'有两个值。我可以输入';'来取两个值。但是当我立刻运行程序时,我需要得到所有可能的答案。在prolog中有可能吗?
答案 0 :(得分:3)
对于二次方程式,如果判别式为零,则 只有一种解决方案,所以您可以直接计算一两个 解决方案,并将其返回到列表中。
discriminat是平方根下的表达式。所以 实数解的经典序言如下:
solve(A*_^2+B*_+C=0,L) :- D is B^2-4*A*C,
(D < 0 -> L = [];
D =:= 0 -> X is (-B)/(2*A), L = [X];
S is sqrt(D), X1 is (-B-S)/(2*A),
X2 is (-B+S)/(2*A), L=[X1,X2]).
这是一个示例运行:
Welcome to SWI-Prolog (threaded, 64 bits, version 8.1.0)
?- solve(1*x^2+5*x+6=0,L).
L = [-3.0, -2.0].