用prolog求平方根
我一直在做下面的编码来寻找平方根。但它不起作用。我找不到错误。直到找到Y的值,它才起作用。平方根部分没有用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
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)之前添加适当的测试。