2015-11-19 70 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

谢谢!你帮了我很多! ;) –