%Base de conocimiento para la tarea de Declarativa
%Centros de estudio
lugar(colegio_santa_cecilia).
lugar(itca_fepade).
lugar(fesa).
%Centros de salud
lugar(hospital_san_rafael).
%Centros de gasolineria
lugar(gasolineria_uno).
%Centros de parques recreativos
lugar(parque_daniel_hernandez).
lugar(parque_san_martin).
lugar(parque_cafetalon).
lugar(parque_la_familia).
lugar(estadio_nacional_las_delicias).
lugar(parque_ecologico_san_jose).
%Centros de centro comercial
lugar(plaza_merliot).
lugar(plaza_la_skina).
lugar(plaza_las_ramblas).
%Calles de lugares
%
lugar(ccCarretera_panamericana).
lugar(carrerera_panamericana_central).
%prueba de intersecciones
lugar(cccarrerera_panamericana_central).
lugar(ccpuntoUno).
lugar(ccpuntoDos).
lugar(ccpuntoTres).
lugar(ccpuntoCuatro).
lugar(ccpuntoPDaniel).
%Coordenadas
%311 417
%529 426
%775 436
% COORDENADAS
% Sintaxis de coordenadas, agregadas como predicados:
% -> coordenada(lugar, coordenadaX, coordenadaY).
%
% Centro de estudio
coordenada(colegio_santa_cecilia, 546, 296).
coordenada(itca_fepade, 714, 407).
coordenada(fesa, 563, 207).
% Centro de Salud
coordenada(hospital_san_rafael, 775, 436).
% Centro de Gasolinera
coordenada(gasolineria_uno, 300, 418).
% Centro de parques recreativos
coordenada(parque_daniel_hernandez, 532, 399).
coordenada(parque_san_martin, 583, 402).
coordenada(parque_cafetalon, 640, 326).
coordenada(parque_la_familia, 647, 183).
coordenada(estadio_nacional_las_delicias, 273, 416).
coordenada(parque_ecologico_san_jose, 456, 61).
% Centros de centro comercial
coordenada(plaza_merliot, 791, 269).
coordenada(plaza_la_skina, 306, 287).
coordenada(plaza_las_ramblas, 975, 460).
coordenada(carretera_panamericana_central,529,426).
%Puntos de interseccion
coordenada(ccpuntoPDaniel,556,400).
coordenada(ccpuntoUno,775,415).
coordenada(ccpuntoDos,745,410).
coordenada(ccpuntoTres,713,408).
coordenada(ccpuntoCuatro,713,434).
%Funcion que retorna la calle y coordenada
obtener_coordenada(Lugar, Coor) :-
coordenada(Lugar, X, Y),
Coor = coordenada(Lugar, X, Y).
%Conexiones de las coordenadas
%Direccional
conecta_con(carretera_panamericana_central,hospital_san_rafael).
%conecta_con(plaza_merliot,hospital_san_rafael).
%pruebas
conecta_con(plaza_merliot, puntoUno
).
conecta_con(ccpuntoUno, ccpuntoDos).
conecta_con(ccpuntoDos, ccpuntoTres).
conecta_con(ccpuntoTres, ccpuntoCuatro).
conecta_con(ccpuntoCuatro, hospital_san_rafael).
%Conexiones de Gasolineria
conecta_con(gasolineria_uno,carretera_panamericana_central).
conecta_con(carretera_panamericana_central, parque_daniel_hernandez).
%conecta_con(plaza_merliot,hospital_san_rafael).
% Base de conocimiento y definiciones anteriores
% ...
% Predicado para encontrar una ruta
% X: Inicio, Y: Destino, R: Ruta
ir_hacia(X, Y, R) :-
abolish(eslabon, 1),
assert(eslabon(X)),
ir_hacia_rec(X, Y, [X], R), % Inicialmente, la ruta solo contiene el punto de inicio
writeln(R).
% Caso base: se ha llegado al destino
ir_hacia_rec(X, Y, TempR, R) :-
conecta_con(X, Y),
writeln(Y),
assert(eslabon(Y)),
reverse([Y | TempR], R). % Invierte la lista para que quede en orden de inicio a destino
% Caso recursivo: sigue buscando la ruta
ir_hacia_rec(X, Y, TempR, R) :-
conecta_con(X, Z),
not(eslabon(Z)),
assert(eslabon(Z)),
ir_hacia_rec(Z, Y, [Z | TempR], R),
writeln(Z),
!.
prueba(X):-
lugar(X).