我想制作一个程序,告诉我需要采取的步骤,要记住的事项是: 从节点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回到这个位置并接受另一个节点。
答案 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])).
问题解决了,无论如何,谢谢。