代码之家  ›  专栏  ›  技术社区  ›  Kai

获取prolog中谓词的所有解

  •  5
  • Kai  · 技术社区  · 16 年前

    我正在prolog中编写一个文本冒险游戏,我正在打印出房间出口。我有这样的代码:

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

    如果连接/2是:

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

    路径是:

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

    等等。

    当我打印一个房间的出口时,它先得到一个,然后想要一个';'来表示我想要另一个解决方案。有没有强制谓词完全计算结果,这样玩家就不必一直要求更多的出口?

    1 回复  |  直到 16 年前
        1
  •  14
  •   Volodymyr Gubarkov    16 年前

    一种方法是做一些像

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

    另一种方法是对所有对象使用特殊谓词,如下所示:

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