我正在Prolog写一个文本冒险游戏,我打印出房间出口.我有以下代码:
exits_from(Room) :-
connected(Room, X),
write(X), write(' ').
Run Code Online (Sandbox Code Playgroud)
其中connected/2是:
connected(X, Y) :- path(X, Y).
connected(X, Y) :- path(Y, X).
Run Code Online (Sandbox Code Playgroud)
和路径是:
path(room, hallway).
path(hallway, foyer).
Run Code Online (Sandbox Code Playgroud)
等等.
当我打印一个房间的出口时,它得到第一个,然后想要一个';' 说我想要另一个解决方案.反正是否强制谓词完全计算结果,以便玩家不必继续要求更多退出?
小智 14
一种方法是做一些事情
print_all_solutions :-
solution(Sol),
write(Sol),
fail. % this causes backtracking
print_all_solutions. % succed
Run Code Online (Sandbox Code Playgroud)
另一种是使用特殊谓词forall,如下所示:
forall(solution(Sol), write(Sol))
Run Code Online (Sandbox Code Playgroud)