假设我们有两个变量X
和Y
。 X
是53
和Y
是52
。我想要做的是通过将1
添加到Y
来比较它们,因此它将是53
- 因此X
将等于Y + 1
。Prolog中的算术比较
我想简单地使用等于运算符和另外的Y
变量,像这样做:
X == Y + 1
虽然这看起来很简单,我得到false
作为结果。我错过了什么?
假设我们有两个变量X
和Y
。 X
是53
和Y
是52
。我想要做的是通过将1
添加到Y
来比较它们,因此它将是53
- 因此X
将等于Y + 1
。Prolog中的算术比较
我想简单地使用等于运算符和另外的Y
变量,像这样做:
X == Y + 1
虽然这看起来很简单,我得到false
作为结果。我错过了什么?
?- X = 50+2, Y = 50+1, X =:= Y + 1.
,你可以看到,(=:=)/ 2计算两边,因为这样做(>)/ 2,等
为了评估表达式树,该is
谓词用于:
X is Y+1.
你一定要小心然而,这只会工作作为测试如果两个X
和Y
接地。如果右侧的变量(在这种情况下为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.
如果你是推理在整数,用你的Prolog系统的CLP(FD)的约束来比较和评价算术整数表达式。
例如,在SICStus,SWI和YAP,后use_module(library(clpfd)
:
?- 53 #= 52 + 1.
true.
这适用于所有的方向。
其他例子:
?- X #= 52 + 1.
X = 53.
?- 53 #= Y + 1.
Y = 52.
?- 53 #= 52 + 1.
true.
你确定变量接地? –