SoloCodigo

Programación Específica => Otros temas específicos => Programación Lógica => Mensaje iniciado por: effe en Domingo 26 de Enero de 2003, 23:00

Título: Re: necesito ayuda con prolog
Publicado por: effe en Domingo 26 de Enero de 2003, 23:00
Necesitaba ayuda para implementar un laberinto en Prolog.
Si pudieras mandarme un ejemplo pa ver como va te lo agradeceria mucho... Es para presentar unas practicas de prolog en la facultad
Título: necesito ayuda con prolog
Publicado por: De Profundiis en Viernes 7 de Febrero de 2003, 15:57
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.