Prologの述語にすべてのソリューションを取得します

StackOverflow https://stackoverflow.com/questions/846145

  •  21-08-2019
  •  | 
  •  

質問

私は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))
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top