sencillos predicados listas funciones explicados ejercicios ejemplos conocimiento concatenar prolog

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))