SWI-Prolog中的问号 - 非确定性函子

时间:2014-05-17 17:31:40

标签: prolog prolog-toplevel

我只是试图在Prolog中实现绝对功能,而且我有一些奇怪的行为。我的代码是:

absval(X, RESULT) :- X >= 0, RESULT is X.
absval(X, RESULT) :- X < 0, RESULT is -X.

当我尝试使用SWI-Prolog absval(-2,X).时,我得到了

X = 2

yes

正如所料。但是当我调用absval(2,X)时,我得到X = 2 ?,我应该插入另一个输入。按Enter键后,我也得到yes

第二个结果是什么意思?我的解决方案有什么问题?

2 个答案:

答案 0 :(得分:2)

您报告的内容与我从此处获得的行为不符:

?- absval(2,X).
X = 2 ;
false.

实际上是预期的。

如果你需要确定它,请使用剪切,或者更好,&#39; if / then / else&#39;构建体:

absval(X, RESULT) :- X >= 0 -> RESULT is X ; RESULT is -X.

答案 1 :(得分:1)

使用单个子句而不删除if-then-else结构的确定性版本:

absolute_value(Value, AbsoluteValue) :-
    AbsoluteValue is sign(Value) * Value.

请注意sign/1是标准的内置算术函数。