Prolog中的算术比较

Prolog中的算术比较,prolog,arithmetic-expressions,Prolog,Arithmetic Expressions,假设我们有两个变量X和YX是53和Y是52。我想做的是通过将1添加到Y来比较它们,这样它将是53——因此X将等于Y+1 我试图通过简单地对Y变量使用相等运算符和加法来实现这一点,如下所示: X == Y + 1 尽管这看起来很简单,但结果是false。我缺少什么?为了计算表达式树,使用谓词: X is Y+1. 但是,您必须小心,这仅在X和Y都接地的情况下作为测试工作。如果右侧的变量(Y在本例中)未接地,则将始终出错 swipldemo: ?- X = 53, Y = 52, X is Y+

假设我们有两个变量
X
Y
X
53
Y
52
。我想做的是通过将
1
添加到
Y
来比较它们,这样它将是
53
——因此
X
将等于
Y+1

我试图通过简单地对
Y
变量使用相等运算符和加法来实现这一点,如下所示:

X == Y + 1

尽管这看起来很简单,但结果是
false
。我缺少什么?

为了计算表达式树,使用谓词:

X is Y+1.
但是,您必须小心,这仅在
X
Y
都接地的情况下作为测试工作。如果右侧的变量(
Y
在本例中)未接地,则将始终出错

swipl
demo

?- 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.

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

例如,在SICStus、SWI和YAP中,在
之后使用\u模块(库(clpfd)

这在各个方向都有效

其他例子:

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

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

?- 53 #= 52 + 1.
true.

正如您所看到的,()/2对双方都进行求值,(>)/2等也进行求值

您确定这些变量是固定的吗?
?- X #= 52 + 1.
X = 53.

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

?- 53 #= 52 + 1.
true.
?- X = 50+2, Y = 50+1, X =:= Y + 1.