Programación en Prolog: Ejemplos Prácticos de Rutas, Sumatorias, Agendas y Relaciones Familiares
Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones
Escrito el en español con un tamaño de 5,14 KB
Ejemplo 1: Búsqueda de Rutas
/*Preguntar el origen y el destino*/
encontrar_ruta:-
nl,
write('Desde: '),
read(A),
write('Hasta: '),
read(B),
ruta(A,B,D),
write('La distancia es '),
write(D),nl,
not(displayruta),
write(B).
/*Disponer para bien encontrar la ruta*/
ruta(A,B,D):-
es_estacion(A,B,D).
/*O bien informar de fallo*/
ruta(_,_,D):-
nl,
write('No hay ruta o no esta dentro de la distancia especificada'),
nl,D=0,
purgar.
/*Ver si hay conexión entre dos ciudades*/
es_estacion(T,T2,D):-
estacion(T,T2,D),
anadir_a_ruta(T).
es_estacion(T,T2,D):-
estacion(T,X,D2),
X\==T2,
anadir_a_ruta(T),
es_estacion(X,T2,D3),
D is D2+D3.
es_estacion(T,_,D):-
write('Punto sin salida en '),
write(T), nl,
D is 0,
fail.
/*Añadir a lista de ciudades visitadas*/
anadir_a_ruta(A):-
not(visitado(A)),
assert(visitado(A)),!.
anadir_a_ruta(_).
/*Preparar otra ejecución*/
purgar:-
retract(visitado(_)),
fail,!.
/*Mostrar las ciudades de la ruta*/
displayruta:-
nl,
write('La ruta es: '),nl,
visitado(A),
write(A),nl,
fail,!.
main:-
encontrar_ruta,
nl,
write('Otra ruta?'),
read(Q),
Q=n.
Ejemplo 2: Cálculo de Sumatoria
sumatoria(1,1).
sumatoria(N,SumN):-
N1 is N-1,
sumatoria(N1,SumN1),
SumN is N+SumN1.
main:-
write('Calculo de sumatoria\n Ingresa el numero '),
read(Num),
sumatoria(Num,SumNum),
write('\nEl resultado de la sumatoria es '),
write(SumNum).
Ejemplo 3: Agenda Telefónica
agenda(lulu,1631).
agenda(joel,7642).
agenda('Tere',8234).
agenda('Raul',5583).
main:-
write('Esta es mi agenda telefonica con opciones'),nl,
repeat,
muestraop(X),
X==3,
write('Gracias por utilizar mi agenda'),nl.
muestraop(X):-
write('\nEscriba una opcion:\n1.-Busqueda por nombre\n2.-Busqueda por telefono\n3.-Salir\n'),
read(X),
ejecutaop(X),!.
ejecutaop(1):-
write('Ingrese un nombre a buscar\n'),
read(El_nombre),
agenda(El_nombre,Num_tel),
write(' El numero telefonico '),
write(Num_tel),
write(' pertenece a: '),
write(El_nombre).
ejecutaop(2):-
write('Ingrese un numero a buscar\n'),
read(Num_tel),
agenda(El_nombre,Num_tel),
write(' El numero telefonico '),
write(Num_tel),
write(' pertenece a: '),
write(El_nombre).
ejecutaop(3).
ejecutaop(_):-
write('Opcion incorrecta\n').
Ejemplo 4: Relaciones Familiares
hijo_de(julia,tere).
hombre(joel).
mujer(lulu).
padre_de(X,Y):-
hijo_de(Y,X),
hombre(X).
madre_de(X,Y):-
hijo_de(Y,X),
mujer(X).
hermano_de(X,Y):-
((padre_de(P,X),
padre_de(P,Y));
(madre_de(M,X),
madre_de(M,Y))),
Y\==X.
tio_de(X,Y):-
hermano_de(X,Z),
(padre_de(Z,Y);
madre_de(Z,Y)).
abuela_pat(X,Y):-
madre_de(X,P),
padre_de(P,Y).
abuela_mat(X,Y):-
madre_de(X,M),
madre_de(M,Y).
abuelo_pat(X,Y):-
padre_de(X,P),
padre_de(P,Y).
abuelo_mat(X,Y):-
padre_de(X,M),
madre_de(M,Y).
lista_madres:-
write('listado de todas las madres'),nl,
madre_de(X,Y),
write(X),write(' es madre de '), write(Y),nl,
fail.