2013-04-17 67 views
0

在序言中,如果我在終端上鍵入1 is 1.,我得到真正的,但如果我嘗試1 is X.我得到如何統一prolog中的數字?

ERROR: is/2: Arguments are not sufficiently instantiated

但我希望它告訴我的一切,都等於1的數字,這將只有1

我怎麼能統一呢?

(注:不使用=

+0

定義'統一(X,X).',但我沒有看到避免統一算子的要點。 – CapelliC

+0

'統一(1,1).'出錯了。函數不存在。 – omega

回答

0

我不是專家,但請注意,序言不能,也不會統一的is右側。你如何期望它統一像64 is x*x這樣的東西?

Rhs的is將被明確評估。只有當Y已經統一爲某個數值時,纔可以編寫類似X is Y+1的內容。

截至你的情況,X is 1將被評估爲OK,而1 is X不會。


重寫@CapelliC的答案,如果你需要避免使用=不惜一切代價統一,程序可以像

:- initialization(main). 
unify(X,X). 
main :- unify(X,1), write(X). 

請注意,這不是默認方式:正常你會使用=

所以,你有三種選擇:

  • 使用=(首選)
  • 放1在右側is(不太優選)
  • 使用unify(X,X).(至少首選)
0

只是爲了展示我在評論中的含義:

?- [user]. 
|: unify(X,X). 
|: % user://1 compiled 0,02 sec, 2 clauses 
true. 

?- unify(1,X). 
X = 1.