检查PROLOG的其他可能性

时间:2016-04-24 08:18:06

标签: prolog

我想制作一个程序,告诉我需要采取的步骤,要记住的事项是: 从节点1到其他颜色(红色,棕色,黄色)必须按此顺序,每一步。 现在我能够使用颜色,但问题是我不知道如何回到最后一步并选择不同的节点,如果我不能继续。 这是我的代码:

maze_steps(A,B) :-
    first_color(A,B,[]).
 first_color(A,B,Visited):- go(A,B, red, Visited).

 next_color(A,B,Cr,Visited):-
    Cr = red -> go(A,B, brown, Visited);
    Cr = brown -> go(A,B, yellow, Visited);
    Cr = yellow -> go(A,B, red, Visited).
 go(A,B,Cr,Visited):-
    link(A, Cr, X), not(member(X,Visited)),
    ( B = X; next_color(X,B,Cr,[A|Visited])).

知识库:

[![link(b,brown,j).
link(b,red,d).
link(j,red,n).
link(j,brown,l).
link(i,yellow,b).
link(i,yellow,d).
link(i,red,t).
link(d,yellow,j).
link(d,red,k).
link(k,yellow,j).
link(k,red,l).
link(k,brown,r).
link(l,brown,n).
link(l,yellow,p).
link(p,yellow,n).
link(t,brown,d).
link(t,red,k).
link(t,brown,h).
link(g,red,k).
link(r,yellow,l).
link(r,brown,p).
link(r,yellow,s).
link(c,brown,i).
link(c,red,t).
link(c,brown,a).
link(a,yellow,t).
link(a,red,h).
link(a,red,m).
link(h,red,r).
link(h,yellow,e).
link(e,yellow,r).
link(e,brown,s).
link(e,red,f).
link(s,red,p).
link(v,yellow,c).
link(v,brown,a).
link(v,red,m).
link(m,brown,h).
link(m,brown,e).
link(m,yellow,f).
link(f,brown,s).
link(start,red,m).][1]][1]

打电话12它与M,BROWN,H一起走,但是它永远不会与M,BROWN,E一起走。 我应该怎么做才能迫使PROLOG回到这个位置并接受另一个节点。

任何帮助都是赞赏的。 trace

trace

1 个答案:

答案 0 :(得分:0)

嗯,奇怪,没有人回答!!!

但我破解了它,就像这样,

 maze_steps(A,B) :-
    go(A,B,red,[]).

 next_color(A,B,Cr,Visited):-
    Cr = red -> go(A,B, brown, Visited);
    Cr = brown -> go(A,B, yellow, Visited);
    Cr = yellow -> go(A,B, red, Visited).

 go(A,B,Cr,Visited):-   
    (link(X, Cr, A); link(A, Cr, X)),
    (\+(member(A+Cr+X,Visited)), \+(member(X+Cr+A,Visited))),
   ( B = X, write([A+Cr+X|Visited]), write('\n'); next_color(X,B,Cr,[A+Cr+X|Visited])).

问题解决了,无论如何,谢谢。