UTNianos

Versión completa: [Paradigmas] Consulta de Lógico.
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Buenas! hoy me toco preguntar a mi =P

Estoy haciendo un tp de lógico y en una parte me trabo con este predicado:

9. recorridoEntre/3: Que relaciona una posición inicial, una posición final y una lista de posiciones, si la lista de posiciones constituye un camino entre las dos posiciones (incluyendo la inicial y la final), avanzando siempre en la dirección del destino yendo en horizontal o vertical (no se permite diagonal). Por ejemplo entre (2,2) y (4,4):
     - un camino que vamos a considerar es (2,2),(2,3),(2,4),(3,4),(4,4)
     - otro camino que también vamos a considerar es (2,2),(2,3),(3,3),(4,3),(4,4)
No vamos a considerar, por ejemplo, el camino (2,2), (2,1), (3,1), (4,1), (4,2), (4,3), (4,4), porque como (4,4) está abajo y a la derecha de (2,2), entonces los pasos válidos son solamente en esas direcciones e ir desde (2,2) a (2,1) implica moverse hacia la izquierda.

Aclaración que puede ser útil: dado que siempre se avanza "hacia adelante", no hay riesgo de pasar dos veces por la misma posición, por lo tanto, no hace falta hacer chequeos en ese sentido.


las posiciones las tengo en FUNCTORES... osea posicion(1,1),posicion(1,2),etc... pero no se me ocurre como hacer el caminito Confused

El mapa es un cuadrado, osea q la primera coordenada es el X y la segunda es el Y (muy perceptible =P)... osea que la posicion(1,1) es limitrofe con la posicion(1,2) y la posicion(2,1) (pero las diagonales no son limitrofes, osea 1,1 con 2,2 no vale =P)

Bueno espero alguna respuesta =( muchas gracias de antemano!
 
No me acuerdo mucho de la sintaxis, y de hecho lo que voy a poner no te anda SEGURO, pero es para orientarte por si estás muy perdida... de todas formas es básico, ya que no relaciona la lista tampoco.


recorridoEntre(posicion(XIni, YIni), posicion(XFin, YFin), lista) :-
XFin is XIni,
YFin is YIni + 1.

recorridoEntre(posicion(XIni, YIni), posicion(XFin, YFin), lista) :-
XFin is XIni + 1,
YFin is YIni.

recorridoEntre(posicion(XIni, YIni), posicion(XFin, YFin), lista) :-
recorridoEntre(posicion(XIni, YIni), posicion(X, Y), _),
recorridoEntre(posicion(X, Y), posicion(XFin, YFin), _).



Lo único que hace es decir que dos posiciones se relacionan si una viene abajo o a la derecha de la otra, o si hay recorrido entre ambas.

No me acuerdo bien cómo se armaba la lista, por lo cual ni me metí con eso, y una de las cosas más complicadas.

Cuando comparás dos elementos que están relacionados por estar arriba o abajo, tenés que ligarlos como únicos dos elementos de la lista. Cuando el recorrido no es directo, tendrías que decir que en la cabeza esté el primer elemento y que en la cola esté el elemento final.

Capaz fue muy básico lo que tiré, pero por las dudas lo pongo =P.

Saludos!
Muchas gracias pablo!! pero ya le encontre la vuelta con recursividad de listas =P
yo tb tengo el mismo tp y tengo esta duda a ver si alguien me puede ayudar

puedeLlamarAShenLong/1: se verifica para un guerrero si puede llegar a todas las posiciones donde se encuentran las 7 esferas del Dragón. No es necesario que sea el mismo guerrero que pueda llegar a todas las posiciones, puede complementarse con sus aliados, es decir un guerrero puede llamar a Shen Long si él o sus aliados pueden llegar a donde están las esferas.

Gracias!!!!
URLs de referencia