我只是试图在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
。
第二个结果是什么意思?我的解决方案有什么问题?
答案 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
是标准的内置算术函数。