Prolog中的算术比较

时间:2015-09-23 10:39:53

标签: prolog arithmetic-expressions

假设我们有两个变量XYX53Y52。我想要做的是通过将1添加到Y来比较它们,以便它53 - 因此X将等于Y + 1

我试图通过简单地使用等号运算符和Y变量的加法来实现它,如下所示:

X == Y + 1

即使这看起来很简单,但我得到了false。我错过了什么?

3 个答案:

答案 0 :(得分:1)

如果您使用整数进行推理,请使用Prolog系统的 CLP(FD)约束来比较和评估算术整数表达式。

例如,在use_module(library(clpfd)之后的SICStus,SWI和YAP中:

?- 53 #= 52 + 1. 
true.

这适用于所有方向。

其他例子:

?- X #= 52 + 1.
X = 53.

?- 53 #= Y + 1.
Y = 52.

?- 53 #= 52 + 1.
true.

答案 1 :(得分:1)

GetGames(User)

如您所见,(=:=)/ 2评估双方,(>)/ 2等等

答案 2 :(得分:0)

为了评估表达式树,使用is谓词:

X is Y+1.

但是,您必须小心,如果XY都已接地,那么这只会作为测试。如果右侧的变量(在这种情况下为Y)没有接地,则始终会出错。

swipl演示

?- X = 53, Y = 52, X is Y+1.
X = 53,
Y = 52.

?- X = 53, Y = 52, X is Y.
false.
?- X = 53, X is Y+1.
ERROR: is/2: Arguments are not sufficiently instantiated
?- Y = 52, X is Y+1.
Y = 52,
X = 53.