Advertisement
Guest User

Untitled

a guest
Oct 25th, 2016
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 4.24 KB | None | 0 0
  1. % pelicula(titulo, [generos], [3 actores principales],director, año estreno).
  2. % consulta a base de conocimientos
  3.  
  4. :- dynamic(pelicula/5).
  5.  
  6. inicio:- abrirBase, menu.
  7.  
  8. % C:\\Users\\Caro\\Documents\\Caro\\Facu\\5to\\IA\\TP sistema experto\\baseDeConocimientos.txt
  9. % D:\\IA\\TP sistema experto\\TP sistema experto\\baseDeConocimientos.txt
  10. % C:\\Users\\Jime\\Desktop\\TP sistema experto\\TP sistema experto\\BaseDeConocimientos.Txt
  11. % C:\\Users\\Caro\\Documents\\Caro\\Facu\\5to\\IA\\TP sistema experto\\baseDeConocimientos.txt
  12. % C:\\Users\\DavidC\\Desktop\\TP sistema experto\\baseDeConocimientos.txt
  13.  
  14.  
  15. abrirBase:- consult('C:\\Users\\DavidC\\Desktop\\TP sistema experto\\baseDeConocimientos.txt').
  16.  
  17. % Para agregar la peli tengo que abrir la bd de vuelta
  18. agregarPeli(T,LGeneros,LActores,Director,Año):-
  19.     consult('C:\\Users\\Caro\\Documents\\Caro\\Facu\\5to\\IA\\TP sistema experto\\baseDeConocimientos.txt'),
  20.     asserta(pelicula(T,LGeneros,LActores,Director,Año)),
  21.                            guardarPeli,
  22.                            write('Película ingresada con éxito!'),nl.
  23.  
  24. guardarPeli:- tell('C:\\Users\\Caro\\Documents\\Caro\\Facu\\5to\\IA\\TP sistema experto\\baseDeConocimientos.txt'),
  25.           listing(pelicula),
  26.           told.
  27.  
  28. menu:-
  29.        write('Me das un dato para realizar la búsqueda?'),nl,
  30.        write('1: genero'),nl,
  31.        write('2: actor'),nl,
  32.        write('3: director'),nl,
  33.        write('4: año de estreno'),nl,
  34.        write('O'),nl,
  35.        write('5: adivino la pelicula?'),nl,nl,
  36.        write('No conozco la pelicula que buscabas? Presiona el 6, y agregala!'),nl,nl,
  37.        write('Elegí una opción: '),nl,
  38.        read(Opc), opcion(Opc).
  39.  
  40.  
  41. opcion(1):- leerGenero(G), filtrarPorGenero(G), menu.
  42.  
  43. opcion(2):- leerActor(A), filtrarPorActor(A), menu.
  44.  
  45. opcion(3):- leerDirector(D), filtrarPorDirector(D), menu.
  46.  
  47. opcion(4):- leerAño(Año), filtrarPorAño(Año), menu.
  48.  
  49. opcion(5):- adivinar.
  50. % adivinar: da una lista de peliculas que cumplen con los datos
  51. % brindados hasta el momento.
  52.  
  53. opcion(6):- write('Ingrese título de la película: '), read(T),nl,
  54.     validaPeli(T).
  55.  
  56. opcion('n'):-menu.
  57.  
  58.  
  59.  
  60.  
  61. leerGenero(G):- write('Ingrese un genero de la pelicula: '), read(G).
  62. leerActor(A):- write('Ingrese un actor principal de la pelicula: '), read(A).
  63. leerDirector(D):- write('Ingrese el director de la pelicula: '), read(D).
  64. leerAño(Año):- write('Ingrese el año de estreno de la pelicula: '), read(Año).
  65.  
  66.  
  67.  
  68. % los metodos filtrarPor... van a eliminar las peliculas que no cumplan%
  69. % la condicion, ya sea el genero, actor, año, etc.
  70.  
  71. filtrarPorGenero(G):-  pelicula(N,LGeneros,_,_,_),
  72.                not(pertenece(G,LGeneros)),
  73.                retract(pelicula(N,_,_,_,_)),
  74.                filtrarPorGenero(G).
  75.  
  76.  
  77. filtrarPorGenero(_).
  78.  
  79. filtrarPorActor(A):-   pelicula(N,_,LActores,_,_),
  80.                not(pertenece(A,LActores)),
  81.                retract(pelicula(N,_,_,_,_)),
  82.                filtrarPorActor(A).
  83.  
  84. filtrarPorActor(_).
  85.  
  86.  
  87. filtrarPorDirector(D):-   pelicula(N,_,_,Director,_),
  88.               not(D = Director),
  89.               %not(pelicula(N,_,_,D,_)),
  90.                       retract(pelicula(N,_,_,_,_)),
  91.               filtrarPorDirector(D).
  92.  
  93. filtrarPorDirector(_).
  94.  
  95.  
  96. filtrarPorAño(Aa):-   pelicula(N,_,_,_,Año),
  97.               %not(pelicula(_,_,_,_,Aa)),
  98.               not(Aa = Año),
  99.               retract(pelicula(N,_,_,_,_)),
  100.               filtrarPorAño(Aa).
  101.  
  102. filtrarPorAño(_).
  103.  
  104.  
  105.  
  106. adivinar:- findall(Titulo,pelicula(Titulo,_,_,_,_),TitulosPelis),
  107.        mostrarListaTitulos(TitulosPelis).
  108.  
  109. pertenece(X,[X|_]).
  110. pertenece(X,[_|T]):- pertenece(X,T).
  111.  
  112. % informo que el dato ingreso es invalido y pregunto si quiere agregar
  113. % una nueva peli, para eso tengo que cerrar la BD, sino borro todos los
  114. % registros!
  115.  
  116.  
  117.  
  118. mostrarListaTitulos([]):- nl,
  119.                       write('No hay mas peliculas que cumplan con la descripción ingresada'),nl.
  120. mostrarListaTitulos([H|T]):- nl,write(H),nl,
  121.                          mostrarListaTitulos(T).
  122.  
  123.  
  124.  
  125. leer([C|P]):-read(C), C\=[], leer(P).
  126. leer([]).
  127.  
  128. validaPeli(T):-pelicula(T,_,_,_,_), write('Peli ya ingresada').
  129. validaPeli(T):- write('Ingrese género: '), leer(LGeneros),nl,
  130.          write('Ingrese actores: '), leer(LActores),nl,
  131.          write('Ingrese director: '), read(Director),nl,
  132.          write('Ingrese año: '), read(Año),nl,
  133.          agregarPeli(T,LGeneros,LActores,Director,Año).
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement