Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- % pelicula(titulo, [generos], [3 actores principales],director, año estreno).
- % consulta a base de conocimientos
- :- dynamic(pelicula/5).
- inicio:- abrirBase, menu.
- % C:\\Users\\Caro\\Documents\\Caro\\Facu\\5to\\IA\\TP sistema experto\\baseDeConocimientos.txt
- % D:\\IA\\TP sistema experto\\TP sistema experto\\baseDeConocimientos.txt
- % C:\\Users\\Jime\\Desktop\\TP sistema experto\\TP sistema experto\\BaseDeConocimientos.Txt
- % C:\\Users\\Caro\\Documents\\Caro\\Facu\\5to\\IA\\TP sistema experto\\baseDeConocimientos.txt
- % C:\\Users\\DavidC\\Desktop\\TP sistema experto\\baseDeConocimientos.txt
- abrirBase:- consult('C:\\Users\\DavidC\\Desktop\\TP sistema experto\\baseDeConocimientos.txt').
- % Para agregar la peli tengo que abrir la bd de vuelta
- agregarPeli(T,LGeneros,LActores,Director,Año):-
- consult('C:\\Users\\Caro\\Documents\\Caro\\Facu\\5to\\IA\\TP sistema experto\\baseDeConocimientos.txt'),
- asserta(pelicula(T,LGeneros,LActores,Director,Año)),
- guardarPeli,
- write('Película ingresada con éxito!'),nl.
- guardarPeli:- tell('C:\\Users\\Caro\\Documents\\Caro\\Facu\\5to\\IA\\TP sistema experto\\baseDeConocimientos.txt'),
- listing(pelicula),
- told.
- menu:-
- write('Me das un dato para realizar la búsqueda?'),nl,
- write('1: genero'),nl,
- write('2: actor'),nl,
- write('3: director'),nl,
- write('4: año de estreno'),nl,
- write('O'),nl,
- write('5: adivino la pelicula?'),nl,nl,
- write('No conozco la pelicula que buscabas? Presiona el 6, y agregala!'),nl,nl,
- write('Elegí una opción: '),nl,
- read(Opc), opcion(Opc).
- opcion(1):- leerGenero(G), filtrarPorGenero(G), menu.
- opcion(2):- leerActor(A), filtrarPorActor(A), menu.
- opcion(3):- leerDirector(D), filtrarPorDirector(D), menu.
- opcion(4):- leerAño(Año), filtrarPorAño(Año), menu.
- opcion(5):- adivinar.
- % adivinar: da una lista de peliculas que cumplen con los datos
- % brindados hasta el momento.
- opcion(6):- write('Ingrese título de la película: '), read(T),nl,
- validaPeli(T).
- opcion('n'):-menu.
- leerGenero(G):- write('Ingrese un genero de la pelicula: '), read(G).
- leerActor(A):- write('Ingrese un actor principal de la pelicula: '), read(A).
- leerDirector(D):- write('Ingrese el director de la pelicula: '), read(D).
- leerAño(Año):- write('Ingrese el año de estreno de la pelicula: '), read(Año).
- % los metodos filtrarPor... van a eliminar las peliculas que no cumplan%
- % la condicion, ya sea el genero, actor, año, etc.
- filtrarPorGenero(G):- pelicula(N,LGeneros,_,_,_),
- not(pertenece(G,LGeneros)),
- retract(pelicula(N,_,_,_,_)),
- filtrarPorGenero(G).
- filtrarPorGenero(_).
- filtrarPorActor(A):- pelicula(N,_,LActores,_,_),
- not(pertenece(A,LActores)),
- retract(pelicula(N,_,_,_,_)),
- filtrarPorActor(A).
- filtrarPorActor(_).
- filtrarPorDirector(D):- pelicula(N,_,_,Director,_),
- not(D = Director),
- %not(pelicula(N,_,_,D,_)),
- retract(pelicula(N,_,_,_,_)),
- filtrarPorDirector(D).
- filtrarPorDirector(_).
- filtrarPorAño(Aa):- pelicula(N,_,_,_,Año),
- %not(pelicula(_,_,_,_,Aa)),
- not(Aa = Año),
- retract(pelicula(N,_,_,_,_)),
- filtrarPorAño(Aa).
- filtrarPorAño(_).
- adivinar:- findall(Titulo,pelicula(Titulo,_,_,_,_),TitulosPelis),
- mostrarListaTitulos(TitulosPelis).
- pertenece(X,[X|_]).
- pertenece(X,[_|T]):- pertenece(X,T).
- % informo que el dato ingreso es invalido y pregunto si quiere agregar
- % una nueva peli, para eso tengo que cerrar la BD, sino borro todos los
- % registros!
- mostrarListaTitulos([]):- nl,
- write('No hay mas peliculas que cumplan con la descripción ingresada'),nl.
- mostrarListaTitulos([H|T]):- nl,write(H),nl,
- mostrarListaTitulos(T).
- leer([C|P]):-read(C), C\=[], leer(P).
- leer([]).
- validaPeli(T):-pelicula(T,_,_,_,_), write('Peli ya ingresada').
- validaPeli(T):- write('Ingrese género: '), leer(LGeneros),nl,
- write('Ingrese actores: '), leer(LActores),nl,
- write('Ingrese director: '), read(Director),nl,
- write('Ingrese año: '), read(Año),nl,
- agregarPeli(T,LGeneros,LActores,Director,Año).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement