2010-12-05 175 views

回答

2

這是不可能的,因爲你可以選擇Y是你想要什麼,他們計算Z反之亦然。

但如果你知道YZ是一些有限的(如正整數小於5),你可以這樣做:

valid_number(1). 
valid_number(2). 
valid_number(3). 
valid_number(4). 

test(X, Y, Z) :- valid_number(Y), valid_number(Z), X is Y + Z. 
+1

這些設置約束也可以通過`between/3`來實現。 – 2010-12-05 15:05:05

3

您必須將它們作爲參數傳遞。 Prolog算術(is/2)不是魔術棒,它的正確參數必須完全實例化(無變量)才能評估。

如果您希望謂詞在多個「方向」上工作,並且有多個基本術語和變量的組合,您將需要使用約束邏輯編程,但這是一個相當先進的邏輯編程領域。在有限域CLP,你可以說

:- use_module(library(clpfd)). % this differs between implementations 
test(X,Y,Z) :- X #= Y + Z. 
+1

我第二larsmans'約束的建議,找到更容易對於初學者來說比低級模式算術更能理解。在我看來,/ 2應該從入門課程中消除,因爲初學者很難理解。 – mat 2010-12-05 13:58:54

相關問題