我致力于编码以寻找平方根。但它没有用。我无法找到错误。直到找到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.
答案 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).