Hola effe,
aclárame lo del laberinto.
¿Quieres que tu programa dibuje un laberinto y puedas moverte por él o solo quieres representarlo formalmente mediante hechos y reglas?
Si es lo primero, no tengo ni idea, nunca he implementado aplicaciones con gráficos usando prolog.
Si es lo segundo... puedes representar mediante hechos lo siguiente:
1. una tabla o mapa con la longitud y anchura del laberinto, no sé... limite(x1,y1,x2,y2), por ejemplo, donde las x e y no serían variables, sino valores constantes.
2. representar los huecos dentro del mapa con sus coordenadas (o representar las "paredes"), por ejemplo... hueco(X,Y).
3. las reglas para moverse por el laberinto podrían ser cuatro: arriba, abajo, izquierda y derecha. De modo que solo podrías ir a un hueco del laberinto, sin salirte de los limites. Algo así:
arriba :- pos(X,Y), hueco(X,Y+1), enmapa(X,Y+1), !.
La función "enmapa" podría calcular si el punto está o no dentro del mapa...
enmapa(X,Y) :- limite(x1,y1,x2,y2), X<x2, X>x1, Y<y1, Y>y2.
Bueno, el predicado de corte (!) quizás no haga falta. Se supone que pos es la posición actual. El problema sería cómo actualizar la posición con cada movimiento, quizás añadiendo...
arriba :- pos(X,Y), hueco(X,Y+1), enmapa(X,Y+1), retract(pos(X,Y)), assert(pos(X,Y+1)), !.
Y así seguramente sí haga falta el predicado de corte.
Bueno, no sé si te habrá servido de algo, pero ahora mismo no puedo ponerme de lleno con ello y tampoco soy un experto en prolog, lo siento.
Un saludo.