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

一种方法是做类似的事情

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

另一种是使用特殊谓词 forall,如下所示:

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