Obtenir toutes les solutions à un prédicat Prolog
-
21-08-2019 - |
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?
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