2016-05-19 34 views
0

,我應該如何繼續添加兩個參數,即使其中一個參數不是數字。例如,如果我輸入add2args(1,2,R).,結果應該是R = 3。如果我輸入add2args(1,x,R).,結果應該是R=1+xProlog - 在Prolog中添加兩個參數,即使其中一個不是數字

到目前爲止,我有這樣的:

add_2args(X,Y,R):- number(X),number(Y), R is (X+Y). 

,讓我把兩個數相加,但我不知道我可以把它打印出來比其他真和假,如果XY是什麼,不是因爲number(X)檢查X是否是數字,所以是正常的數字。我還需要添加哪些其他規則才能獲得理想的結果?

回答

0

除非用類似於is/2的內容進行明確評估,否則Prolog將象徵性地查看錶達式(作爲Prolog術語)。所以,做最簡單的方法這在您的情況可能如下所示:

add_2args(X, Y, R) :- 
    ( number(X), number(Y) % Both X and Y are numbers, then... 
    -> R is X + Y   % Evaluate the expression 
    ; R = X + Y    % Else, just unify R with the expression 
    ). 

R = X + Y不會計算表達式而只用R統一術語X + Y。對於=/2is/2之間的差異,這也是一個不錯的「Prolog初學者指南」插圖。如果你寫了,例如,R = 2 + 3,然後做了write(R)你會看到2 + 3,而不是5。您隨後可以這樣做,Result is R然後將評估表達式R和產量Result = 5

| ?- R = 2 + 3, Result is R. 

R = 2+3 
Result = 5 

yes 
| ?- 
+0

非常感謝你的解釋 – Streamline

+0

@Streamline如果我回答你的問題,你可以通過點擊左邊的大對勾接受的答案。 :) – lurker

+0

完成!再次感謝 :) – Streamline