Prolog中的二次方程求解

时间:2014-08-18 03:50:10

标签: prolog

我编写了一个用类似术语解决方程式的代码(例如: - x ^ 2 + 5 * x + 6 = 0)。这里'x'有两个值。我可以输入';'来取两个值。但是当我立刻运行程序时,我需要得到所有可能的答案。在prolog中有可能吗?

1 个答案:

答案 0 :(得分:3)

对于二次方程式,如果判别式为零,则 只有一种解决方案,所以您可以直接计算一两个 解决方案,并将其返回到列表中。

enter image description here

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