2015-09-23 41 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.