在序言中,如果我在終端上鍵入1 is 1.
,我得到真正的,但如果我嘗試1 is X.
我得到如何統一prolog中的數字?
ERROR: is/2: Arguments are not sufficiently instantiated
。
但我希望它告訴我的一切,都等於1的數字,這將只有1
我怎麼能統一呢?
(注:不使用=
)
在序言中,如果我在終端上鍵入1 is 1.
,我得到真正的,但如果我嘗試1 is X.
我得到如何統一prolog中的數字?
ERROR: is/2: Arguments are not sufficiently instantiated
。
但我希望它告訴我的一切,都等於1的數字,這將只有1
我怎麼能統一呢?
(注:不使用=
)
我不是專家,但請注意,序言不能,也不會統一的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).
請注意,這不是默認方式:正常你會使用=
。
所以,你有三種選擇:
=
(首選)is
(不太優選)unify(X,X).
(至少首選)只是爲了展示我在評論中的含義:
?- [user].
|: unify(X,X).
|: % user://1 compiled 0,02 sec, 2 clauses
true.
?- unify(1,X).
X = 1.
定義'統一(X,X).',但我沒有看到避免統一算子的要點。 – CapelliC
'統一(1,1).'出錯了。函數不存在。 – omega