用prolog求平方根

用prolog求平方根,prolog,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('R

我一直在做下面的编码来寻找平方根。但它不起作用。我找不到错误。直到找到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.

首先,如果您正在Prolog中进行实验,请不要使用
read/1
和其他副作用的内置程序。相反,只需键入要尝试的值。同样,您不需要打印结果。Prolog的顶级将为您完成此任务

?- 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为sqrt(Y)之前添加适当的测试。