predicados - Obtener todas las soluciones a un predicado en Prolog
prolog pdf (1)
Estoy escribiendo un juego de texto y aventuras en Prolog, y estoy imprimiendo salidas de salas. Tengo un código que hace:
exits_from(Room) :-
connected(Room, X),
write(X), write('' '').
donde está conectado / 2 es:
connected(X, Y) :- path(X, Y).
connected(X, Y) :- path(Y, X).
y el camino es:
path(room, hallway).
path(hallway, foyer).
y así.
Sin embargo, cuando estoy imprimiendo las salidas de una habitación, obtiene la primera, luego quiere un '';'' para decir que quiero otra solución. ¿Hay alguna forma de obligar a un predicado a calcular el resultado por completo, para que el jugador no tenga que seguir pidiendo más salidas?
una forma es hacer algo como
print_all_solutions :-
solution(Sol),
write(Sol),
fail. % this causes backtracking
print_all_solutions. % succed
otra es usar un predicado especial para todo, de la siguiente manera:
forall(solution(Sol), write(Sol))