Prolog  :  Programming in Logic Logica y Analisis de Algoritmos Francisco Lambert 2010-1
Lenguaje de programación ideado a principios de los años 70 en la Universidad de Aix-Marseille (Marsella, Francia). 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. Se compone por  Clausulas de Horn  ,que constituyen reglas del tipo  MODUS PONENS .
CLAUSULAS DE HORN Regla de inferencia logica con cero o mas premisas y un unico consecuente. En Prolog se permiten solamente dos tipos de forma para una clausura de Horn : Existe solo UNA proposicion Atomica en la Izquierda de la clausula (Clausula con cabeza), utilizada para definir  Reglas  . El lado izquierdo estas Vacio (clausula sin cabeza), utilizada para definir  Hechos  .
MODUS PONENS En Latin : “ Modo que Afirmando Afirma“,  es una regla de inferencia logica construida de la siguiente forma : “ Si está soleado, entonces es de día. Está soleado. Por lo tanto, es de día.”
Comenzando.... Instalacion 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 . Version Actual 5.8.3 2010-01-10. La instalacion no es nada fuera de lo comun, se debe dejar todo por defecto e instalar simplemente .
Interfaz La ventana principal de SWI Prolog se ve asi :  Para crear un nuevo archivo vamos a File ->New... Y estaremos en la carpeta Prolog, ahi generamos un Archivo Nuevo y comenzamos a Programar.
Sintaxis Las variables deben escribirse con Mayúsculas Las constantes se escriben con Minúsculas Las afirmaciones se terminan con . (punto) No se pueden dejar espacios entre los nombres de las constantes, para ello utilizar el guion bajo (_). Los comentarios empiezan con % . Operadores Conjunción ->  , (coma)  Disyunción ->  ; (punto y coma) Regla o Condición ->  :- (dos puntos y  guion) Fin de la condición ->  .  (punto)
Hechos •  Proposiciones:  o “Juan es un programador”  o “El león es un mamífero”  programador(juan).  mamifero(leon).  •  Nótese que se anota primero el  predicado  y entre paréntesis el sujeto de  la proposición
Relaciones o  “Juan es el padre de Miguel”  padre(juan, miguel).  •  Sentencias condicionales  • “ Si el león come carne, entonces es  carnívoro”  carnivoro(leon):- comecarne(leon)  Reglas
Conjuncion Emplea el operador lógico AND  Se utiliza la coma ( , )  :  tia(X,Y):-hermana(X,Z),padre(Z,Y). Emplea el operador lógico OR  Se utiliza el punto y coma ( ; )  hijo(X,Y):-padre(Y,X);madre(Y,X).  Conjuncion Disyuncion
Consultas •  No es necesario programar el mecanismo de búsqueda  •  Utiliza la  resolución  en sus derivaciones (generalización del  modus  ponens junto con la unificación)  lagarto(iguana).  serpiente(vibora).  mamifero(conejo).  Las consultas son interactivas mediante el indicador de comandos (?-):  ?- lagarto(iguana).  Yes.  (Respuesta de Prolog )
Se puede usar variables en las Consultas , de la siguiente forma : lagarto(X). X=iguana . 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 .
Ejemplo pais(usa).  pais(canada).  pais(mexico).  capital(usa,washington).  capital(canada,ottawa).  capital(mexico,cd_mexico).  %Consultas realizadas: ?-  pais(mexico).  yes.  ?-  capital(canada,washington).  no.  ?-  pais(japon).  no.  ?-  pais(X).  X=usa ; X=canada ; X=mexico  Yes ?-  capital(canada,B).  B=ottawa  yes.  ?-  capital(R,washington).  R=usa  yes.  .  Ejemplo
BACKTRACKING Las consultas pueden tener una o varias metas , Consideremos el sig. ejemplo:  compra(X,Y):-sevende(Y),gusta(X,Y),bueno(Y).  sevende(vestido).  sevende(sombrero).  sevende(zapatos).  gusta(jaime,zapatos).  gusta(maria,vestido).  gusta(maria,sombrero).  bueno(sombrero).  •  La regla compra tiene éxito si todas sus  metas tienen éxito.
BACKTRACKING Prolog intenta satisfacer las metas de la consulta de izquierda a derecha y para cada meta va probando las cláusulas correspondientes . 1er. Intento:   compra(Z, vestido ):- sevende( vestido ),gusta(Z, vestido ),bueno( vestido ).  Busca la cláusula para sustituir Z (de izq. a der.), teniendo a  vestido  como segundo argumento  y encuentra gusta( maria , vestido )  Se tiene ahora:  compra( maria , vestido ):- sevende( vestido ),gusta( maria , vestido ), bueno( vestido ).  La regla fracasa porque no hay regla que satisfaga bueno( vestido )
BACKTRACKING •  Esto no significa que compra(maria,vestido)  haya fracasado, sino que se ha seleccionado una cláusula que no conduce a la solución.  •  Por esa razón es necesario aplicar un retroceso (backtracking).  2do. Intento:   compra(Z, sombrero ):- sevende( sombrero ),gusta(Z, sombrero ),bueno( sombrero ).  Busca la cláusula para sustituir Z (de izq. a der.), teniendo a  sombrero  como segundo argumento  y encuentra gusta( maria , sombrero )  Se tiene ahora:  compra( maria , sombrero ):- sevende( sombrero ),gusta( maria , sombrero ), bueno( sombrero ).  La regla fracasa porque no hay regla que satisfaga bueno( sombrero )
OPERADORES
FUNCIONES
EJERCICIO Crear un fichero nuevo llamado patos. Expresar el hecho “donald, lucas y gilito son patos”. Expresar que sabemos que S es un pato si es sobrino de T y T es un pato. Añadir que juanito, jaimito y jorgito son sobrinos de donald. Por ultimo, sabemos que un pato tiene plumas y hace cuac, por lo tanto añadiremos eso a nuestro programa . Piolin y daisy tienen plumas pero solo daisy hace cuac. 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).)  Al Terminar la orden halt nos cerrara el programa .
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).
.- Proxima Clase Tarea

Jflambert lyada -ayudantia 1 prolog

  • 1.
    Prolog : Programming in Logic Logica y Analisis de Algoritmos Francisco Lambert 2010-1
  • 2.
    Lenguaje de programaciónideado a principios de los años 70 en la Universidad de Aix-Marseille (Marsella, Francia). 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. Se compone por Clausulas de Horn ,que constituyen reglas del tipo MODUS PONENS .
  • 3.
    CLAUSULAS DE HORNRegla de inferencia logica con cero o mas premisas y un unico consecuente. En Prolog se permiten solamente dos tipos de forma para una clausura de Horn : Existe solo UNA proposicion Atomica en la Izquierda de la clausula (Clausula con cabeza), utilizada para definir Reglas . El lado izquierdo estas Vacio (clausula sin cabeza), utilizada para definir Hechos .
  • 4.
    MODUS PONENS EnLatin : “ Modo que Afirmando Afirma“, es una regla de inferencia logica construida de la siguiente forma : “ Si está soleado, entonces es de día. Está soleado. Por lo tanto, es de día.”
  • 5.
    Comenzando.... Instalacion 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 . Version Actual 5.8.3 2010-01-10. La instalacion no es nada fuera de lo comun, se debe dejar todo por defecto e instalar simplemente .
  • 6.
    Interfaz La ventanaprincipal de SWI Prolog se ve asi : Para crear un nuevo archivo vamos a File ->New... Y estaremos en la carpeta Prolog, ahi generamos un Archivo Nuevo y comenzamos a Programar.
  • 7.
    Sintaxis Las variablesdeben escribirse con Mayúsculas Las constantes se escriben con Minúsculas Las afirmaciones se terminan con . (punto) No se pueden dejar espacios entre los nombres de las constantes, para ello utilizar el guion bajo (_). Los comentarios empiezan con % . Operadores Conjunción -> , (coma) Disyunción -> ; (punto y coma) Regla o Condición -> :- (dos puntos y guion) Fin de la condición -> . (punto)
  • 8.
    Hechos • Proposiciones: o “Juan es un programador” o “El león es un mamífero” programador(juan). mamifero(leon). • Nótese que se anota primero el predicado y entre paréntesis el sujeto de la proposición
  • 9.
    Relaciones o “Juan es el padre de Miguel” padre(juan, miguel). • Sentencias condicionales • “ Si el león come carne, entonces es carnívoro” carnivoro(leon):- comecarne(leon) Reglas
  • 10.
    Conjuncion Emplea eloperador lógico AND Se utiliza la coma ( , ) : tia(X,Y):-hermana(X,Z),padre(Z,Y). Emplea el operador lógico OR Se utiliza el punto y coma ( ; ) hijo(X,Y):-padre(Y,X);madre(Y,X). Conjuncion Disyuncion
  • 11.
    Consultas • No es necesario programar el mecanismo de búsqueda • Utiliza la resolución en sus derivaciones (generalización del modus ponens junto con la unificación) lagarto(iguana). serpiente(vibora). mamifero(conejo). Las consultas son interactivas mediante el indicador de comandos (?-): ?- lagarto(iguana). Yes. (Respuesta de Prolog )
  • 12.
    Se puede usarvariables en las Consultas , de la siguiente forma : lagarto(X). X=iguana . 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 .
  • 13.
    Ejemplo pais(usa). pais(canada). pais(mexico). capital(usa,washington). capital(canada,ottawa). capital(mexico,cd_mexico). %Consultas realizadas: ?- pais(mexico). yes. ?- capital(canada,washington). no. ?- pais(japon). no. ?- pais(X). X=usa ; X=canada ; X=mexico Yes ?- capital(canada,B). B=ottawa yes. ?- capital(R,washington). R=usa yes. . Ejemplo
  • 14.
    BACKTRACKING Las consultaspueden tener una o varias metas , Consideremos el sig. ejemplo: compra(X,Y):-sevende(Y),gusta(X,Y),bueno(Y). sevende(vestido). sevende(sombrero). sevende(zapatos). gusta(jaime,zapatos). gusta(maria,vestido). gusta(maria,sombrero). bueno(sombrero). • La regla compra tiene éxito si todas sus metas tienen éxito.
  • 15.
    BACKTRACKING Prolog intentasatisfacer las metas de la consulta de izquierda a derecha y para cada meta va probando las cláusulas correspondientes . 1er. Intento: compra(Z, vestido ):- sevende( vestido ),gusta(Z, vestido ),bueno( vestido ). Busca la cláusula para sustituir Z (de izq. a der.), teniendo a vestido como segundo argumento y encuentra gusta( maria , vestido ) Se tiene ahora: compra( maria , vestido ):- sevende( vestido ),gusta( maria , vestido ), bueno( vestido ). La regla fracasa porque no hay regla que satisfaga bueno( vestido )
  • 16.
    BACKTRACKING • Esto no significa que compra(maria,vestido) haya fracasado, sino que se ha seleccionado una cláusula que no conduce a la solución. • Por esa razón es necesario aplicar un retroceso (backtracking). 2do. Intento: compra(Z, sombrero ):- sevende( sombrero ),gusta(Z, sombrero ),bueno( sombrero ). Busca la cláusula para sustituir Z (de izq. a der.), teniendo a sombrero como segundo argumento y encuentra gusta( maria , sombrero ) Se tiene ahora: compra( maria , sombrero ):- sevende( sombrero ),gusta( maria , sombrero ), bueno( sombrero ). La regla fracasa porque no hay regla que satisfaga bueno( sombrero )
  • 17.
  • 18.
  • 19.
    EJERCICIO Crear unfichero nuevo llamado patos. Expresar el hecho “donald, lucas y gilito son patos”. Expresar que sabemos que S es un pato si es sobrino de T y T es un pato. Añadir que juanito, jaimito y jorgito son sobrinos de donald. Por ultimo, sabemos que un pato tiene plumas y hace cuac, por lo tanto añadiremos eso a nuestro programa . Piolin y daisy tienen plumas pero solo daisy hace cuac. 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).) Al Terminar la orden halt nos cerrara el programa .
  • 20.
    EJERCICIO %patos% %FranciscoLambert 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.