【发布时间】:2017-09-17 21:35:59
【问题描述】:
首先,我看到今天早些时候有人问了同样的问题,我决定自己试一试(但遇到了麻烦)。我希望我为此创建了一个新问题没关系!
我正在尝试制作一个解决二次公式 X = (−b±√b2−4ac)/2a 的 prolog 程序。实现的谓词 quadratic([A,B,C], [Result]) 将 a、b 和 c 的列表作为第一个参数,将结果列表作为第二个参数。然而,这些清单给我带来了麻烦;我写了这段代码:
quadratic([A,B,C], [X]):-
underRoot([A,B,C], UnderRootResult),
UnderRootResult<0,
X is 0.
quadratic([A,B,C], [X]):-
underRoot([A,B,C], UnderRootResult),
UnderRootResult=:=0,
X is -B/2*A.
quadratic([A,B,C], [X]):-
underRoot([A,B,C], UnderRootResult),
UnderRootResult>0,
X is -B - sqrt(UnderRootResult)/2*A,
X is -B + sqrt(UnderRootResult)/2*A.
(这可能是错误的,所以请提前原谅) 运行它会给我 underRoot/2 的未定义过程错误。我真的不明白为什么会这样。我觉得我对如何编程有了大致的了解,但我犯了很多新手错误。不过,我似乎无法找出问题所在,因此我将不胜感激!
编辑:另外,如果我被允许同时问两个问题,如果列表中 >0 作为一个结果,我将如何获得两个 X?
【问题讨论】:
-
谓词以小写开头,所以
UnderRoot可能是错的? -
我不敢相信。很抱歉犯了那个错误。
-
你可以写成 X is -B - sqrt(UnderRootResult)/(2*A) 和 Y is -B + sqrt(UnderRootResult)/(2* A) 然后你写 L = [X,Y]。