Question

J'écris un jeu d'aventure texte en Prolog, et je suis l'impression des sorties de la chambre. J'ai du code qui fait:

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

où connecté / 2 est:

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

et le chemin est la suivante:

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

et ainsi de suite.

Quand je suis en train d'imprimer les sorties pour une chambre bien, il obtient le premier, veut alors un « ; » dire que je veux une autre solution. Y at-il de toute façon de forcer un prédicat à calculer le résultat tout à fait, de sorte que le joueur ne serait pas continuer à demander pour plus de sorties?

Était-ce utile?

La solution

est une façon de faire quelque chose comme

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

est d'utiliser une autre forall prédicat spécial, comme suit:

forall(solution(Sol), write(Sol))
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top