%%------------------------------------------------------------------------- %% %% entre dos de ellas. %% %% Manera de ejecutarse: %% Antes de correr el programa, debe modificarse la base de datos %% %% goal %% assertz(vuelo(nueva_york, chicago, 1000)), %% assertz(vuelo(chicago, denver, 1000)), %% etc... %% desde: %% a: %% a lo que se debe contestar con el nombre de la ciudad que se desea y que %% existe en la base de datos %%------------------------------------------------------------------------- domains s = symbol i = integer database vuelo(s,s,i) visitado(s) predicates ruta(s,s,i) encontrar_optima(s,s,i) es_vuelo(s,s,i) encontrar_ruta goal assertz(vuelo(nueva_york, chicago, 1000)), assertz(vuelo(chicago, denver, 1000)), assertz(vuelo(nueva_york, toronto, 800)), assertz(vuelo(nueva_york, denver, 1900)), assertz(vuelo(toronto, calgary, 1500)), assertz(vuelo(toronto, los_angeles, 1800)), assertz(vuelo(toronto, chicago, 500)), assertz(vuelo(denver, urbana, 1000)), assertz(vuelo(denver, houston, 1500)), assertz(vuelo(houston, los_angeles, 1500)), assertz(vuelo(denver, los_angeles, 1000)), encontrar_ruta, nl. clauses encontrar_ruta:- write("desde: "), readln(A), write("a: "),readln(B), encontrar_optima(A, B, 10000). encontrar_ruta. encontrar_optima(A, B, Max):- ruta(A, B, D), D<Max, write("La distancia es ", D), nl, encontrar_optima(A, B, D). encontrar_optima(_,_,_). ruta(A, B, C):- es_vuelo(A, B, C). ruta(_, _, D):- !, nl, D=0, fail, !. es_vuelo(T, T2, D):- vuelo(T, T2, D). es_vuelo(T, T2, D):- vuelo(T, X, D2), X<>T2, es_vuelo(X, T2, D3), D2 + D3 = D.