我正在尝试在 prolog 中做一个小项目,用户可以输入一个列表,然后计算列表中的平均值、最大值等。
到目前为止一切顺利,但我在编写 max 函数时遇到了问题(在列表中找到最大数)。代码是:
maxN([X],X):-!.
maxN([X|L],X) :- maxN(L,M), X > M.
maxN([X|L],M) :- maxN(L,M), M >= X.
该函数本身单独工作,但我收到此错误消息:
声明为“procedure”的谓词“forma::maxN/2 (i,o)”实际上是“nondeterm”forma.pro
这是我在 *.cl 定义中的谓词:
maxN: (integer* Z, integer U) 过程 (i,o)。
我不能将其声明为不确定,因为它会导致我的整个表格出现问题。你能帮我/给一个提示如何使它成为一个程序吗?我在想我必须在某个地方进行削减,但到目前为止我的尝试都失败了。
PS我正在使用Visual Prolog 7.4。
编辑:在尝试了将两条规则合二为一或使用累加器的替代方案之后,我现在知道谓词是“确定”而不是过程。根据我的 Prolog 指南,这意味着谓词现在没有多个解决方案,而是有可能失败。基本上我到目前为止所做的所有代码变体都让我有了一个“决心”。