5

Prolog でテキスト アドベンチャー ゲームを作成しており、部屋の出口を出力しています。私は次のようなコードを持っています:

exits_from(Room) :-
  connected(Room, X),
  write(X), write('  ').

ここで、connected/2 は次のとおりです。

connected(X, Y) :- path(X, Y).
connected(X, Y) :- path(Y, X).

パスは次のとおりです。

path(room, hallway).
path(hallway, foyer).

等々。

ただし、部屋の出口を印刷しているときは、最初に取得し、次に「;」が必要です。別の解決策が欲しいと言う。とにかく述語に結果を完全に計算させて、プレーヤーがさらに終了を要求し続ける必要がないようにする方法はありますか?

4

1 に答える 1

15

1つの方法は次のようなことをすることです

print_all_solutions :-
  solution(Sol),
  write(Sol),
  fail. % this causes backtracking
print_all_solutions. % succed

もう1つは、次のように、特別な述語forallを使用することです。

forall(solution(Sol), write(Sol))
于 2009-05-10T23:38:31.997 に答える