Untitled

mail@pastecode.io avatar
unknown
prolog
7 months ago
2.0 kB
4
Indexable
Never
%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).

%Coordenadas
%311 417
%529 426
%775 436
coordenada(gasolineria_uno,311,417).
coordenada(carretera_panamericana_central,529,426).
coordenada(hospital_san_rafael,775,436).

%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(gasolineria_uno,carretera_panamericana_central).
conecta_con(carretera_panamericana_central,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).