2016-04-26 4 views
0

Prologで迷路プログラムを作成しようとしています。その目的は、迷路の始点からmという迷路の中心点までのルートを見つけることです。迷路は、青、緑、紫、またはオレンジの4つの色のいずれかを使用して接続された四角で構成されています。開始から中心までのルートは、4色の繰り返しパターンに従います。Prologでメンバールールが正しく動作しない

私は次のコードを作成しました:何らかの理由で

link2(A, Colour, B) :- link(A, Colour, B).  
link2(A, Colour, B) :- link(B, Colour, A). 

changecolour(blue,green). 
changecolour(green,purple). 
changecolour(purple,orange). 
changecolour(orange,blue). 

route(A, Colour1, B, List2) :- 
    link2(A, Colour1, B), 
    append([A], [B], List2). 
route(A, Colour1, B, List2) :- 
    link2(A, Colour1, X), 
    changecolour(Colour1,Colour2), 
    append([A], List, List2), 
    \+ member(A, List), 
    route(X, Colour2, B, List). 

を、期待通りのコードが動作していないと私はなぜわかりません。私は否定(メンバーではない)のルールとは何かを感じていますが、誰かが私が間違っていることをアドバイスできますか?

+1

何をしていますか、何を期待していましたか? –

+2

'maplist(dif(A)、Ls)'を使って、純粋に論理的な方法で 'A'が' Ls'リストにないことを表現します。 – mat

+0

私はプロローグが最初からmまでのルートを出力することを目指していますが、トレースを実行すると、startが変数であるリストのメンバであるかどうかを確認するため、_G449は> Exitを返します。 )lists:member(start、[start | _G452])?クリープ。出口は成功を意味しますが、この例では「メンバーではありません」があるため、メンバーを退出させることはここで失敗することを意味します。プログラムが既に訪問された広場に戻った場合にのみ、「メンバーではない」は失敗するはずです。 –

答えて

0

changecolourを定義し、使用したことはありません。 nextcolourを使用しましたが、決して定義しませんでした。

+0

Stack Overflowにクエリを入力したときにエラーが発生しました。それはプログラムで正しいです。 –

+0

@ m.lewis1995あなたが問題を抱えているあなたの質問に実際のコードをコピー/ペーストすると、大きな助けになります。 – lurker

+0

これはすべてのコード –

関連する問題