2016-04-24 8 views
0

私は私が取る必要があるステップを教えてくれるプログラムを作りたいと思います。 ノード1から他のものには色(赤、茶、黄)がなければなりませんこの手順は、すべての手順に適用されます。 今私は色を持って行くことができますが、最後のステップに戻って別のノードを選択する方法が分かりません。 これは私のコードである:他の可能性をチェックするPROLOG

知識ベース:CALL 12 ON

[![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] 

ITはM、BROWN、Hで行くが、それはM、ブラウンに出ることはない、E. 私がすべきかこの点に戻り、別のノードを取得するように指示するように指示してください。

助けが薦められます。 WELL trace

trace

答えて

0

、奇妙thatsの、誰も答えていません!

は、しかし、私はこのように、

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])). 

問題は、おかげでとにかく、解決して、それを割れました。

関連する問題