假設我們有兩個變量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.
你確定變量接地? –