2013-10-19 35 views
1

我想重新格式化我的代碼,而沒有if then else條件。是否有捷徑可尋?這只是代碼的一個例子。我認爲在序言中使用IF-THEN-ELSE很奇怪:\我正在尋找更多的遞歸案例。像模式匹配序言刪除IF然後ELSE

rules(Param1, Param2) :- 
(
    A -> 
     B, C, D,  
     (
      E -> F 
     ; 
      G, H 
     )  
    ; 
     I 
). 

編輯:編輯我的代碼看起來像更多的應該是什麼

+0

Prolog中的Params應該以大寫字母開頭,如果它們沒有實際意義的變量。 – lurker

+0

@mbratch抱歉,這是一個錯字。 – Lorac

回答

2

pred(X):- 
    (A -> B 
    ; C -> D 
    ; G 
). 
pred(Y):- Q. 

一般的轉換方案是

pred(X):- pred1(X). 
pred(Y):- Q. 

pred1(X):- call(A), !, B. 
pred1(X):- call(C), !, D. 
pred1(X):- G. 

非常感謝j4n bur53指出需要call - in case there's a cut裏面的AC!請參閱-> documentation

+0

嗯,我試着修改我的代碼,並且它在一次迭代後給我總是正確的http://pastebin.com/gkibnMWy – Lorac

+1

@Lorac我不認爲你的映射與威爾的規則完全一致。我認爲括號內的(E - > F; G,H)'需要被分解到它自己的謂詞中,像這樣:http://pastebin.com/gxK0qPEa – lurker

+0

@mbratch令人驚歎的是它的工作!謝謝 – Lorac