Prolog SWI doesn't show result
我有这段代码,当我尝试使用SWI运行它时,什么也没显示。无限循环,也许。我不会解释我的处理方式,因为我不得不说很多话。只想知道这是怎么回事。我以这种方式运行它:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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. |
这是一种不必要的左递归...
我认为您应该像
这样重写递归调用
1 2 | ... mesmaLinhaEste_58(Atual,Objetivo,R,Lista). |
我还将合并第三和第四子句,因为重复测试
1 2 3 4 5 | mesmaLinhaEste_58(Atual,Objetivo,[P|R],Lista):- ( estaEste58(Atual,P) -> mesmaLinhaEste_58(Atual,Objetivo,R,[P|Lista]) ; mesmaLinhaEste_58(Atual,Objetivo,R,Lista) ). |