質問
私はPrologでテキストアドベンチャーゲームを書いている、と私は部屋の出口をプリントアウトしています。私が行うコードを持っています:
exits_from(Room) :-
connected(Room, X),
write(X), write(' ').
接続/ 2である
connected(X, Y) :- path(X, Y).
connected(X, Y) :- path(Y, X).
とパスは次のとおりです。
path(room, hallway).
path(hallway, foyer).
のように。
私も部屋のために終了を印刷していた場合、、それは、その後、最初に望んでます「;」私は別のソリューションをしたいと言うこと。プレイヤーはより多くの出口を求め続ける必要がないように、完全に結果を計算する述語を強制的にとにかくありますか?
解決
1つの方法は、
のような何かを行うことですprint_all_solutions :-
solution(Sol),
write(Sol),
fail. % this causes backtracking
print_all_solutions. % succed
次のように他には、forallは特別な述語を使用することです。
forall(solution(Sol), write(Sol))
所属していません StackOverflow