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).
を、期待通りのコードが動作していないと私はなぜわかりません。私は否定(メンバーではない)のルールとは何かを感じていますが、誰かが私が間違っていることをアドバイスできますか?
何をしていますか、何を期待していましたか? –
'maplist(dif(A)、Ls)'を使って、純粋に論理的な方法で 'A'が' Ls'リストにないことを表現します。 – mat
私はプロローグが最初からmまでのルートを出力することを目指していますが、トレースを実行すると、startが変数であるリストのメンバであるかどうかを確認するため、_G449は> Exitを返します。 )lists:member(start、[start | _G452])?クリープ。出口は成功を意味しますが、この例では「メンバーではありません」があるため、メンバーを退出させることはここで失敗することを意味します。プログラムが既に訪問された広場に戻った場合にのみ、「メンバーではない」は失敗するはずです。 –