使用prolog进行平方根查找

时间:2014-08-18 02:15:52

标签: prolog

我致力于编码以寻找平方根。但它没有用。我无法找到错误。直到找到Y的价值才有效。平方根部分没有。

print('A = '), read(A),
print('B = '), read(B),
print('C = '), read(C),
nl,
nl,
X is 2*A,
Y is (B^2 - 4*A*C),
Z is sqrt(Y),

R1 is (-B+Z)/X,
R2 is (-B-Z)/X,

print('R1 = '), print(R1), nl,
print('R2 = '), print(R2), nl.

1 个答案:

答案 0 :(得分:3)

首先,如果您正在试验Prolog,请不要使用read/1和其他有效的内置插件。相反,只需输入您想要尝试的值即可。同样,您不需要打印结果。 Prolog的toplevel会为你做这件事。

?- A = 1, B = 2, C = 1,
   X is 2*A,
   Y is (B^2 - 4*A*C),
   Z is sqrt(Y),
   R1 is (-B+Z)/X,
   R2 is (-B-Z)/X.
A = C, C = 1,
B = X, X = 2,
Y = 0,
Z = 0.0,
R1 = R2, R2 = -1.0.

答案对我来说很好。但是让我们来看看你得到的错误:

ERROR: sqrt/1: Arithmetic: evaluation error: `undefined'

系统在这里说的是它为sqrt/1计算的值没有定义。喜欢

?- X is sqrt(-1).
ERROR: sqrt/1: Arithmetic: evaluation error: `undefined'

可评估仿函数sqrt/1仅针对浮点数定义 - 浮点数是实数的近似值。但是,在这里我们宁愿期待一个想象的数字。这就是价值未定义的原因。

因此,为了避免该错误,您必须在Z is sqrt(Y).

之前添加适当的测试