2010-06-09 105 views
2

我還在搞清楚prolog是如何工作的,並試圖用if語句開發一個小型測試程序,但不能真正得到我需要的值。Prolog簡單問題

prog(Sx,Sy) :- 
    Sx > 0 -> 
     update(Sx,10,S1), update(S1,10,S2), prog(S2,S2) ; 
     Sy. 

update(S,V,RES) :- 
    RES is S-V. 

我希望prog可以給Sy作爲答案而不是true,所以我可以使用它作爲另一個謂詞的參數。此代碼給出了一個錯誤,當條件爲false時,我試過了:

prog([],[],Sy). 
prog(Sx,Sy) :- 
    Sx > 0 -> 
     update(Sx,10,S1), update(S1,10,S2), prog(S2,S2) ; 
     prog([],[],Sy). 

但是,只是返回true。

有人可以告訴我如何讓它返回Sy嗎?

感謝

+0

有人嗎?我試過不同的方式,但無濟於事:( – d0pe 2010-06-09 18:31:36

回答

1

Prolog的規則沒有「返回」的價值觀,箭頭,分號模式不這樣做最地道的方式。相反,你應該使用兩個規則,每個規則對應一個Sx。我不確定你想用你的例子代表什麼。如果Sx不大於零,你認爲Sy有什麼價值?假設你想SY是SX在這種情況下:

prog(Sx, Sy) :- Sx > 0, update(Sx,10,S1), update(S1,10,S2), prog(S2,Sy). 
prog(Sx, Sx) :- Sx <= 0. 

要使用另一個謂語用這個,你會做這樣的事情:

prog(40, V), 
write(V), 
prog(V, Z), 
write(Z). 

等等,與第二個參數被綁定到每種情況下的「答案」。