Jflambert lyada -ayudantia 1 prolog

1,238 views
1,072 views

Published on

Ayudantia 1 Logica y Analisis de Algoritmos - Introduccion a la programacion logica en PROLOG

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,238
On SlideShare
0
From Embeds
0
Number of Embeds
39
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Jflambert lyada -ayudantia 1 prolog

  1. 1. Prolog : Programming in Logic Logica y Analisis de Algoritmos Francisco Lambert 2010-1
  2. 2. <ul><li>Lenguaje de programación ideado a principios de los años 70 en la Universidad de Aix-Marseille (Marsella, Francia). </li></ul><ul><li>Se enmarca en el paradigma de los lenguajes lógicos y declarativos, lo que lo diferencia enormemente de otros lenguajes más populares tales como Fortran, Pascal, C o Java. </li></ul><ul><li>Se compone por Clausulas de Horn ,que constituyen reglas del tipo MODUS PONENS . </li></ul>
  3. 3. CLAUSULAS DE HORN <ul><li>Regla de inferencia logica con cero o mas premisas y un unico consecuente. </li></ul><ul><li>En Prolog se permiten solamente dos tipos de forma para una clausura de Horn : </li></ul><ul><li>Existe solo UNA proposicion Atomica en la Izquierda de la clausula (Clausula con cabeza), utilizada para definir Reglas . </li></ul><ul><li>El lado izquierdo estas Vacio (clausula sin cabeza), utilizada para definir Hechos . </li></ul>
  4. 4. MODUS PONENS <ul><li>En Latin : “ Modo que Afirmando Afirma“, es una regla de inferencia logica construida de la siguiente forma : </li></ul><ul><li>“ Si está soleado, entonces es de día. </li></ul><ul><li>Está soleado. </li></ul><ul><li>Por lo tanto, es de día.” </li></ul>
  5. 5. Comenzando.... Instalacion <ul><li>http://www.swi-prolog.org/download/stable Es el enlace donde podemos obtener los binarios de SWI Prolog , dependiendo del sistema operativo que tengamos instalado (actualmente soportado en Windows, Linux y MAC). El archivo pesa 7,7 mb . </li></ul><ul><li>Version Actual 5.8.3 2010-01-10. </li></ul><ul><li>La instalacion no es nada fuera de lo comun, se debe dejar todo por defecto e instalar simplemente . </li></ul>
  6. 6. Interfaz <ul><li>La ventana principal de SWI Prolog se ve asi : </li></ul><ul><li>Para crear un nuevo archivo vamos a File ->New... </li></ul><ul><li>Y estaremos en la carpeta Prolog, ahi generamos un Archivo Nuevo y comenzamos a Programar. </li></ul>
  7. 7. Sintaxis <ul><li>Las variables deben escribirse con Mayúsculas </li></ul><ul><li>Las constantes se escriben con Minúsculas </li></ul><ul><li>Las afirmaciones se terminan con . (punto) </li></ul><ul><li>No se pueden dejar espacios entre los nombres de las constantes, para ello utilizar el guion bajo (_). </li></ul><ul><li>Los comentarios empiezan con % . </li></ul><ul><li>Operadores </li></ul><ul><li>Conjunción -> , (coma) </li></ul><ul><li>Disyunción -> ; (punto y coma) </li></ul><ul><li>Regla o Condición -> :- (dos puntos y guion) </li></ul><ul><li>Fin de la condición -> . (punto) </li></ul>
  8. 8. Hechos <ul><li>• Proposiciones: </li></ul><ul><li>o “Juan es un programador” </li></ul><ul><li>o “El león es un mamífero” </li></ul><ul><li>programador(juan). </li></ul><ul><li>mamifero(leon). </li></ul><ul><li>• Nótese que se anota primero el </li></ul><ul><li>predicado y entre paréntesis el sujeto de </li></ul><ul><li>la proposición </li></ul>
  9. 9. Relaciones <ul><li>o “Juan es el padre de Miguel” </li></ul><ul><li>padre(juan, miguel). </li></ul><ul><li>• Sentencias condicionales </li></ul><ul><li>• “ Si el león come carne, entonces es </li></ul><ul><li>carnívoro” </li></ul><ul><li>carnivoro(leon):- comecarne(leon) </li></ul>Reglas
  10. 10. Conjuncion <ul><li>Emplea el operador lógico AND </li></ul><ul><li>Se utiliza la coma ( , ) : </li></ul><ul><li>tia(X,Y):-hermana(X,Z),padre(Z,Y). </li></ul><ul><li>Emplea el operador lógico OR </li></ul><ul><li>Se utiliza el punto y coma ( ; ) </li></ul><ul><li>hijo(X,Y):-padre(Y,X);madre(Y,X). </li></ul>Conjuncion Disyuncion
  11. 11. Consultas <ul><li>• No es necesario programar el mecanismo de búsqueda </li></ul><ul><li>• Utiliza la resolución en sus derivaciones (generalización del modus ponens junto con la unificación) </li></ul><ul><li>lagarto(iguana). </li></ul><ul><li>serpiente(vibora). </li></ul><ul><li>mamifero(conejo). </li></ul><ul><li>Las consultas son interactivas mediante el indicador de comandos (?-): </li></ul><ul><li>?- lagarto(iguana). </li></ul><ul><li>Yes. (Respuesta de Prolog ) </li></ul>
  12. 12. <ul><li>Se puede usar variables en las Consultas , de la siguiente forma : </li></ul><ul><li>lagarto(X). </li></ul><ul><li>X=iguana . </li></ul><ul><li>La X es la variable, que debe de ser Mayuscula. En Caso de que existiera mas de un valor posible para X, Prolog nos entrega UN resultado por pantalla, si quedamos conformes presionamos ENTER y continuamos, si queremos mas valores presionamos ; y prolog continuara entregandonos las respuestas . </li></ul>
  13. 13. Ejemplo <ul><li>pais(usa). </li></ul><ul><li>pais(canada). </li></ul><ul><li>pais(mexico). </li></ul><ul><li>capital(usa,washington). </li></ul><ul><li>capital(canada,ottawa). </li></ul><ul><li>capital(mexico,cd_mexico). </li></ul><ul><li>%Consultas realizadas: </li></ul><ul><li>?- pais(mexico). </li></ul><ul><li>yes. </li></ul><ul><li>?- capital(canada,washington). </li></ul><ul><li>no. </li></ul><ul><li>?- pais(japon). </li></ul><ul><li>no. </li></ul><ul><li>?- pais(X). </li></ul><ul><li>X=usa ; </li></ul><ul><li>X=canada ; </li></ul><ul><li>X=mexico </li></ul><ul><li>Yes </li></ul><ul><li>?- capital(canada,B). </li></ul><ul><li>B=ottawa </li></ul><ul><li>yes. </li></ul><ul><li>?- capital(R,washington). </li></ul><ul><li>R=usa </li></ul><ul><li>yes. </li></ul><ul><li>. </li></ul>Ejemplo
  14. 14. BACKTRACKING <ul><li>Las consultas pueden tener una o varias metas , Consideremos el sig. ejemplo: </li></ul><ul><li>compra(X,Y):-sevende(Y),gusta(X,Y),bueno(Y). </li></ul><ul><li>sevende(vestido). </li></ul><ul><li>sevende(sombrero). </li></ul><ul><li>sevende(zapatos). </li></ul><ul><li>gusta(jaime,zapatos). </li></ul><ul><li>gusta(maria,vestido). </li></ul><ul><li>gusta(maria,sombrero). </li></ul><ul><li>bueno(sombrero). </li></ul><ul><li>• La regla compra tiene éxito si todas sus </li></ul><ul><li>metas tienen éxito. </li></ul>
  15. 15. BACKTRACKING <ul><li>Prolog intenta satisfacer las metas de la consulta de izquierda a derecha y para cada meta va probando las cláusulas correspondientes . </li></ul><ul><li>1er. Intento: </li></ul><ul><li>compra(Z, vestido ):- sevende( vestido ),gusta(Z, vestido ),bueno( vestido ). </li></ul><ul><li>Busca la cláusula para sustituir Z (de izq. a der.), teniendo a vestido como segundo argumento y encuentra gusta( maria , vestido ) </li></ul><ul><li>Se tiene ahora: </li></ul><ul><li>compra( maria , vestido ):- sevende( vestido ),gusta( maria , vestido ), bueno( vestido ). </li></ul><ul><li>La regla fracasa porque no hay regla que satisfaga bueno( vestido ) </li></ul>
  16. 16. BACKTRACKING <ul><li>• Esto no significa que compra(maria,vestido) haya fracasado, sino que se ha seleccionado una cláusula que no conduce a la solución. </li></ul><ul><li>• Por esa razón es necesario aplicar un retroceso (backtracking). </li></ul><ul><li>2do. Intento: </li></ul><ul><li>compra(Z, sombrero ):- sevende( sombrero ),gusta(Z, sombrero ),bueno( sombrero ). </li></ul><ul><li>Busca la cláusula para sustituir Z (de izq. a der.), teniendo a sombrero como segundo argumento y encuentra gusta( maria , sombrero ) </li></ul><ul><li>Se tiene ahora: </li></ul><ul><li>compra( maria , sombrero ):- sevende( sombrero ),gusta( maria , sombrero ), bueno( sombrero ). </li></ul><ul><li>La regla fracasa porque no hay regla que satisfaga bueno( sombrero ) </li></ul>
  17. 17. OPERADORES
  18. 18. FUNCIONES
  19. 19. EJERCICIO <ul><li>Crear un fichero nuevo llamado patos. </li></ul><ul><li>Expresar el hecho “donald, lucas y gilito son patos”. </li></ul><ul><li>Expresar que sabemos que S es un pato si es sobrino de T y T es un pato. </li></ul><ul><li>Añadir que juanito, jaimito y jorgito son sobrinos de donald. </li></ul><ul><li>Por ultimo, sabemos que un pato tiene plumas y hace cuac, por lo tanto añadiremos eso a nuestro programa . </li></ul><ul><li>Piolin y daisy tienen plumas pero solo daisy hace cuac. </li></ul><ul><li>Importante : Luego de tener el codigo listo, se debe compilar en Compile -> Compile Buffer . Si editamos un fichero y lo compilamos denuevo, al volver a prolog deberemos cargarlo nuevamente, eso se realiza automatico luego de la compilacion o manualmente con la orden consult(nombreFichero) (En este caso, consult(patos).) </li></ul><ul><li>Al Terminar la orden halt nos cerrara el programa . </li></ul>
  20. 20. EJERCICIO %patos% %Francisco Lambert Espinoza% %Logica y Analisis de Algoritmos% %24-03-2010% esPato(lucas). esPato(donald). esPato(gilito). esPato(S):-sobrino(S,T),esPato(T). esPato(P) :- tienePlumas(P),haceCuac(P). sobrino(jorgito,donald). sobrino(jaimito,donald). sobrino(juanito,donald). tienePlumas(piolin). tienePlumas(daisy). haceCuac(daisy).
  21. 21. .- <ul><li>Proxima Clase Tarea </li></ul>

×