2015-09-23 110 views
3

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

我想简单地使用等于运算符和另外的Y变量,像这样做:

X == Y + 1 

虽然这看起来很简单,我得到false作为结果。我错过了什么?

+0

你确定变量接地? –

回答

1
?- X = 50+2, Y = 50+1, X =:= Y + 1. 

,你可以看到,(=:=)/ 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. 
1

如果你是推理在整数,用你的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.