我正在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).
等等。
当我打印房间的出口时,它会得到第一个,然后想要一个';'说我想要另一个解决方案。反正是否强制谓词完全计算结果,以便玩家不必继续要求更多退出?
答案 0 :(得分:14)
一种方法是做
之类的事情print_all_solutions :-
solution(Sol),
write(Sol),
fail. % this causes backtracking
print_all_solutions. % succed
另一个是使用特殊谓词forall,如下所示:
forall(solution(Sol), write(Sol))