2015-11-19 104 views
0

我有這段代碼,當我嘗試用SWI運行它時,沒有顯示任何內容。無限循環,也許。我不會解釋我在做什麼,因爲我不得不說很多事情。只是想知道它有什麼問題。我跑這樣說:Prolog SWI不顯示結果

mesmaLinhaEste_58((0,4),(4,4),[(1,3),(1,2),(0,0),(2,0),(3,2),(3,3),(4,0)],[]). 

mesmaLinhaEste_58((X,_),(Xx,_),[],Lista):- 
    N is Xx - X, 
    length(Lista,Nn), 
    Nn =:= N. 

mesmaLinhaEste_58(Atual,Objetivo,[P|R],Lista):- 
    estaEste58(Atual,P), 
    append([P],Lista,NList), 
    mesmaLinhaEste_58(Atual,Objetivo,R,NList). 

mesmaLinhaEste_58(Atual,Objetivo,[P|R],Lista):- 
    \+estaEste58(Atual,P), 
    mesmaLinhaEste_58(Atual,Objetivo,[R],Lista). 

estaEste58((X,Y),(Xx,Yy)):- 
    Xx > X, 
    Yy =:= Y. 
+0

當你說你*嘗試運行它*你究竟詢問了什麼? – lurker

+0

請翻譯姓名。 – repeat

回答

1

\+estaEste58(Atual,P),mesmaLinhaEste_58的第四子句/ 4保持建立一個嵌套尾部結構,如[[[[... R ...]]]]。

這是一種不適當的左遞歸的... 我想你應該重寫喜歡

... 
mesmaLinhaEste_58(Atual,Objetivo,R,Lista). 

遞歸調用我還要合併第三和第四條款,因爲在重複測試estaEste58(Atual,P)沒有點,並且會'利用'P到Lista而不會調用append:

mesmaLinhaEste_58(Atual,Objetivo,[P|R],Lista):- 
    ( estaEste58(Atual,P) 
    -> mesmaLinhaEste_58(Atual,Objetivo,R,[P|Lista]) 
    ; mesmaLinhaEste_58(Atual,Objetivo,R,Lista) 
    ). 
+0

謝謝!你幫了我很多! ;) –