在Prolog中获取谓词的所有解决方案

时间:2009-05-10 21:29:01

标签: prolog

我正在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).

等等。

当我打印房间的出口时,它会得到第一个,然后想要一个';'说我想要另一个解决方案。反正是否强制谓词完全计算结果,以便玩家不必继续要求更多退出?

1 个答案:

答案 0 :(得分:14)

一种方法是做

之类的事情
print_all_solutions :-
  solution(Sol),
  write(Sol),
  fail. % this causes backtracking
print_all_solutions. % succed

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

forall(solution(Sol), write(Sol))