SlideShare une entreprise Scribd logo
1  sur  13
Este tutorial de programación en Prolog constituye
                la primera entrega de una serie de cursillos
                orientados a aquellas personas que desconocen la
                programación declarativa relacional y su lenguaje
                rey: Prolog.



                                   un entorno de desarrollo Prolog se compone de:
                                   Un compilador. Transforma el código fuente en código de
                                   byte. A diferencia de Java, no existe un standard al respecto. Por
Prolog       se      necesita      eso, el codigo de byte generado por un entorno de desarrollo no
                                   tiene por que funcionar en el intérprete de otro entorno.
unicamente dos cosas: *un          Un intérprete. Ejecuta el código de byte.
editor de texto y un entorno       Un shell o top-level. Se trata de una utilidad que per mite
de desarrollo Prolog. *Como        probar los programas, depurarlos, etc. Su funcionamiento es
editor de texto resulta            similar a los interfaces de línea de comando de los sistemas
                                   operativos.
altamente recomendable el          Una biblioteca de utilidades. Estas bibliotecas son, en
uso de Emacs.                      general, muy amplias. incluyen (afortunadamente) unas
                                   bibliotecas standard -ISO que permiten funcionalidades
                                   básicas como manipular cadenas, entrada/salida, etc.
Como observará en breve, Prolog carece de
declaraciones     en     el    sentido   imperativo:
secciones, declaraciones de tipo, declaraciones de
variable, declaraciones de procedimientos, etc.


Los comentarios en Prolog se escriben comenzando la
línea con un símbolo de porcentaje. Ejemplo:
% Hola, esto es un comentario.
% Y esto también.




Se escriben como una secuencia de caracteres
alfabéticos comenzando siempre por mayúscula o
subrayado.
 Ejemplos de variables:
Variable
_Hola
_Pero no son variables:
variable
$Hola
p
todas las variables anónimas se escriben
                                   igual, son todas distintas. Es decir,
Los operadores simplemente         mientras que dos apariciones de la
sirven para escribir términos      secuencia de caracteres Hola se refieren a
unarios o binarios de una          la misma variable, dos apariciones de la
manera más cómoda. Por             secuencia _ se refieren a variables distintas.
ejemplo, un factor definido
como operador infijo es la
suma (+).



               Un término se compone de un
               factor seguido de cero a N                             Para referirnos a un término con
               argumentos entre paréntesis y                          el factor f y A argumentos
               separados por comas. Los números                       usamos la notación f/A. Por
               enteros      o   decimales    sin                      ejemplo: p(a,b), p(1,f(j)), p(A,_)
               restricciones de tamaño también                        son todos ejemplos del término
               son términos.                                          p/2.
La unificación es el mecanismo mediante el cuál las
                        variables lógicas toman valor en Prolog. El valor que
                          puede tomar una variable consiste en cualquier
                                   término, por ejemplo, j(3), 23.2,



                                       DANDO VALOR
   EJEMPLOS                               A LAS
PARADIGMÁTICOS
                                        VARIABLES



 Ejemplo: k(Z,Z) y k(4,H). Por culpa del primer argumento, Z se liga al
 valor 4. Por culpa del segundo argumento, Z y H unifican, pero como Z
 se liga a un valor, entonces H se liga a ese mismo valor, que es 4.
EJECUTANDO COSAS



          PREDICADOS Y OBJETIVOS                            SECUENCIAS DE OBJETIVOS
    Los predicados son los elementos                       En Prolog los objetivos se pueden
    ejecutables en Prolog. En muchos                       combinar mediante conectivas
    sentidos     se    asemejan   a    los                 propias de la lógica de primer
    procedimientos o funciones típicos de                  orden:
    los lenguajes imperativos.                             la conjunción, la disyunción y la
                                                           negación.

  BACKTRACKING
Supongamos         que          PREDICADOS                       PREDICADO SIGNIFICADO
disponemos de dos           PREDEFINIDOS (BUILT-
                                                                <      menor que
predicados p/1 y q/1                IN)
que tienen varias                                               >      mayor que
                           El más importante es la
soluciones (el orden es    igualdad: =/2. Este predicado        =<     menor o igual que
significativo):            tiene éxito si sus dos               >=     mayor o igual que
p(1) tiene éxito. p(2)     argumentos unifican entre sí,
                           falla en caso contrario. Por         =:=    igualdad aritmética
tiene éxito. q(2) tiene
éxito.                     ejemplo, el objetivo X = 3           == desigualdad
                                                                aritmética
EL CODIGO                                   CLÁUSULAS SIN CUERPO



Cláusulas.- Los predicados se
definen mediante un conjunto de   Si no existen condiciones para que una
cláusulas:                        cláusula sea cierta podemos omitir el cuerpo.
                                  En tal caso solamente escribimos la cabeza
                                  terminada en punto. Por ejemplo:
                                  edad(juan,32).
                                  edad(luis,20).



                                  Podemos escribir las cláusulas en una sola
   CULTURILLA                     línea, si no lo hacemos es por legibilidad: a
                                  :- b,c,d.
Ejemplo simple
Veamos un predica do compuesto por una simple cláusula:
•es_viejo(Individuo) :- edad(Individuo,Valor), Valor > 60.
Ahora invocamos el objetivo es_viejo(luis). Para ello supongamos que la edad de Luis es 32 años, es
decir, el objetivo edad(luis,32) tiene éxito.
Primero se unifica la cabeza de la cláusula con el objetivo. Es decir, unificamos es_viejo(luis)
y es_viejo(Individuo), produciéndose la ligadura de la variable Individuo al valor luis. Como el
ámbito de visibilidad de la variable es su cláusula, la lig adura también afecta al cuerpo, luego estamos
ejecutando realmente:
es_viejo(luis) :- edad(luis,Valor), Valor > 60.
Ahora ejecutamos el cuerpo, que liga la variable Valor a 32. Pero el cuerpo falla porque el segundo objetivo
falla (32>60 es falso). Entonces la cláusula falla y se produce back tracking. Como no hay más puntos de
elección el objetivo falla. Es decir, Luis no es un viejo.
EJEMPLO MENOS SIMPLE
Ahora veamos como las ligaduras que se producen en el cuerpo de la cláusula afectan ta mbién a la cabeza.
Consideramos el siguiente predicado compuesto de una única cláusula:
mayor que(Fulano,Mengano) :-
edad(Mengano,EdadMengano),                     edad(Fulano,EdadFulanano),             Edad     Fulano      >
EdadMengano.
Supongamos que la edad de Juan es 20 a ños y la de Luis es 32 años. Ejecutamos el objetivo
mayor_que(luis,Quien):
El Shell es una aplicación más que podemos
                                            ejecutar en nuestro sistema operativo. En
El Shell de Prolog es una aplicación que    nuestro caso, la aplicación se denomina
permite ejecutar objetivos y ver las        ciaosh. Al ejecutarla aparece un típico
ligaduras de las variables de manera        mensaje de bienvenida:
interactiva                                 Ciao-Prolog 1.4 #0: Sat Nov. 27 19:27:11 1999
                                            ?-




     EL SHELL DE PROLOG                             EJECUTANDO EL SHELL



                                  MI PRIMER OBJETIVO


   Los únicos objetivos que podemos ejecutar corresponden a pre dicados predefinidos
   en el sistema. Nuestro predicado predefinido favorito es la igualdad =/2.
   Así que vamos a probarlo: Ciao-Prolog 1.4 #0: Sat Nov 27 19:27:11 1999
   ?- t(X,3) = t(4,Z).
    X = 4,
   Z=3?
Una vez que hemos compilado y cargado
                 nuestro programa vamos a estudiar sus
PREDICADOS
                 características. Una de ellas es el back
REVERSIBLES      tracking, o la posibilidad de obtener varias       PREDICADOS NO
                 soluciones, como ya hemos visto.                    REVERSIBLES




         2 ?- hermano(A,B).                                No todos los predicados son
         A = Juan
                                                           reversibles. Por ejemplo, los de
         B = Adalberto ;
                                                           comparación      aritmética.    El
         A = Adalberto
         B = Juan ;                                        predicado >/2 sirve para saber si
         A = Alberto                                       un número es mayor que otro,
         B = Gerónimo ;                                    pero no sirve para saber todos los
         A = Gerónimo                                      números mayores que uno dado
         B = Alberto ;                                     (puesto que son infinitos).
         No
         3 ?-
MI PRIMER PROGRAMA EN PROLOG



Los programas se escriben en ficheros de texto, generalmente con
extensión .pl. y pueden contener comentarios y código
el código existe el predicado consult/1.
CARGANDO CODIGO   Recuerde que puede ser necesario indicar
                  la ruta completa del fichero fuente
Ejercicios de prolog

Contenu connexe

Tendances

Tema 5 arreglos y cadenas por gio
Tema 5   arreglos y cadenas por gioTema 5   arreglos y cadenas por gio
Tema 5 arreglos y cadenas por gioRobert Wolf
 
Teoría básica de los semigrupos y grupos
Teoría básica de los semigrupos y gruposTeoría básica de los semigrupos y grupos
Teoría básica de los semigrupos y gruposLuis Talledo Yahuana
 
Lenguajes libre de contexto
Lenguajes libre de contextoLenguajes libre de contexto
Lenguajes libre de contextoVerónica Es'Loo
 
E:\1 Prepa\Cursos 2010\LóGica 2010\Ejercicios Para Tercer Examen (402 Y 411)
E:\1 Prepa\Cursos 2010\LóGica 2010\Ejercicios Para Tercer Examen (402 Y 411)E:\1 Prepa\Cursos 2010\LóGica 2010\Ejercicios Para Tercer Examen (402 Y 411)
E:\1 Prepa\Cursos 2010\LóGica 2010\Ejercicios Para Tercer Examen (402 Y 411)guest0ab744
 
Cálculo de Predicados
Cálculo de PredicadosCálculo de Predicados
Cálculo de Predicadosrezzaca
 
El álgebra booleana
El álgebra booleanaEl álgebra booleana
El álgebra booleanaSaulssg
 
27778471 programacion-logica
27778471 programacion-logica27778471 programacion-logica
27778471 programacion-logicamaxsp5566
 
3. Elementos basicos de un programa
3.  Elementos basicos de un programa3.  Elementos basicos de un programa
3. Elementos basicos de un programamartell024
 
Utp 2015-2_sirn_s11_operaciones difusas
 Utp 2015-2_sirn_s11_operaciones difusas Utp 2015-2_sirn_s11_operaciones difusas
Utp 2015-2_sirn_s11_operaciones difusasjcbp_peru
 
LMF-T5: Resolución proposicional
LMF-T5: Resolución proposicionalLMF-T5: Resolución proposicional
LMF-T5: Resolución proposicionalJosé A. Alonso
 
LMF-T1: Sintaxis y semántica de la lógica proposicional
LMF-T1: Sintaxis y semántica de la lógica proposicionalLMF-T1: Sintaxis y semántica de la lógica proposicional
LMF-T1: Sintaxis y semántica de la lógica proposicionalJosé A. Alonso
 

Tendances (18)

Tema 5 arreglos y cadenas por gio
Tema 5   arreglos y cadenas por gioTema 5   arreglos y cadenas por gio
Tema 5 arreglos y cadenas por gio
 
Guia 1-logica
Guia 1-logicaGuia 1-logica
Guia 1-logica
 
Teoría básica de los semigrupos y grupos
Teoría básica de los semigrupos y gruposTeoría básica de los semigrupos y grupos
Teoría básica de los semigrupos y grupos
 
Lenguajes libre de contexto
Lenguajes libre de contextoLenguajes libre de contexto
Lenguajes libre de contexto
 
E:\1 Prepa\Cursos 2010\LóGica 2010\Ejercicios Para Tercer Examen (402 Y 411)
E:\1 Prepa\Cursos 2010\LóGica 2010\Ejercicios Para Tercer Examen (402 Y 411)E:\1 Prepa\Cursos 2010\LóGica 2010\Ejercicios Para Tercer Examen (402 Y 411)
E:\1 Prepa\Cursos 2010\LóGica 2010\Ejercicios Para Tercer Examen (402 Y 411)
 
Clase3 - Identificadores y directivas en Delphi
Clase3 - Identificadores y directivas en DelphiClase3 - Identificadores y directivas en Delphi
Clase3 - Identificadores y directivas en Delphi
 
Gramáticas formales
Gramáticas formales Gramáticas formales
Gramáticas formales
 
Programacion
ProgramacionProgramacion
Programacion
 
Programacion
ProgramacionProgramacion
Programacion
 
Cálculo de Predicados
Cálculo de PredicadosCálculo de Predicados
Cálculo de Predicados
 
El álgebra booleana
El álgebra booleanaEl álgebra booleana
El álgebra booleana
 
Tipos de lenguaje formal según Chomsky
Tipos de lenguaje formal según ChomskyTipos de lenguaje formal según Chomsky
Tipos de lenguaje formal según Chomsky
 
Fbf
FbfFbf
Fbf
 
27778471 programacion-logica
27778471 programacion-logica27778471 programacion-logica
27778471 programacion-logica
 
3. Elementos basicos de un programa
3.  Elementos basicos de un programa3.  Elementos basicos de un programa
3. Elementos basicos de un programa
 
Utp 2015-2_sirn_s11_operaciones difusas
 Utp 2015-2_sirn_s11_operaciones difusas Utp 2015-2_sirn_s11_operaciones difusas
Utp 2015-2_sirn_s11_operaciones difusas
 
LMF-T5: Resolución proposicional
LMF-T5: Resolución proposicionalLMF-T5: Resolución proposicional
LMF-T5: Resolución proposicional
 
LMF-T1: Sintaxis y semántica de la lógica proposicional
LMF-T1: Sintaxis y semántica de la lógica proposicionalLMF-T1: Sintaxis y semántica de la lógica proposicional
LMF-T1: Sintaxis y semántica de la lógica proposicional
 

Similaire à 4ta tarea de sistemas expertos (20)

Prolog2010
Prolog2010Prolog2010
Prolog2010
 
Prolog
PrologProlog
Prolog
 
Prolog
PrologProlog
Prolog
 
Prolog
PrologProlog
Prolog
 
Prolog
PrologProlog
Prolog
 
Prolog
PrologProlog
Prolog
 
Manual lab prolog
Manual lab prologManual lab prolog
Manual lab prolog
 
Introducción
IntroducciónIntroducción
Introducción
 
Manual de Prolog
Manual de PrologManual de Prolog
Manual de Prolog
 
Introduccion a prolog
Introduccion a prologIntroduccion a prolog
Introduccion a prolog
 
Tutorial basico prolog
Tutorial basico prologTutorial basico prolog
Tutorial basico prolog
 
Jflambert lyada -ayudantia 1 prolog
Jflambert   lyada -ayudantia 1 prologJflambert   lyada -ayudantia 1 prolog
Jflambert lyada -ayudantia 1 prolog
 
Prolog
PrologProlog
Prolog
 
Prolog2
Prolog2Prolog2
Prolog2
 
Programacion
ProgramacionProgramacion
Programacion
 
Operaciones algebraicas
Operaciones algebraicasOperaciones algebraicas
Operaciones algebraicas
 
Intro lógica de predicados
Intro lógica de predicadosIntro lógica de predicados
Intro lógica de predicados
 
Prolog
Prolog Prolog
Prolog
 
GRAMATICAS AMBIGUAS
GRAMATICAS AMBIGUASGRAMATICAS AMBIGUAS
GRAMATICAS AMBIGUAS
 
Calculo de predicados
Calculo de predicadosCalculo de predicados
Calculo de predicados
 

4ta tarea de sistemas expertos

  • 1.
  • 2. Este tutorial de programación en Prolog constituye la primera entrega de una serie de cursillos orientados a aquellas personas que desconocen la programación declarativa relacional y su lenguaje rey: Prolog. un entorno de desarrollo Prolog se compone de: Un compilador. Transforma el código fuente en código de byte. A diferencia de Java, no existe un standard al respecto. Por Prolog se necesita eso, el codigo de byte generado por un entorno de desarrollo no tiene por que funcionar en el intérprete de otro entorno. unicamente dos cosas: *un Un intérprete. Ejecuta el código de byte. editor de texto y un entorno Un shell o top-level. Se trata de una utilidad que per mite de desarrollo Prolog. *Como probar los programas, depurarlos, etc. Su funcionamiento es editor de texto resulta similar a los interfaces de línea de comando de los sistemas operativos. altamente recomendable el Una biblioteca de utilidades. Estas bibliotecas son, en uso de Emacs. general, muy amplias. incluyen (afortunadamente) unas bibliotecas standard -ISO que permiten funcionalidades básicas como manipular cadenas, entrada/salida, etc.
  • 3. Como observará en breve, Prolog carece de declaraciones en el sentido imperativo: secciones, declaraciones de tipo, declaraciones de variable, declaraciones de procedimientos, etc. Los comentarios en Prolog se escriben comenzando la línea con un símbolo de porcentaje. Ejemplo: % Hola, esto es un comentario. % Y esto también. Se escriben como una secuencia de caracteres alfabéticos comenzando siempre por mayúscula o subrayado. Ejemplos de variables: Variable _Hola _Pero no son variables: variable $Hola p
  • 4. todas las variables anónimas se escriben igual, son todas distintas. Es decir, Los operadores simplemente mientras que dos apariciones de la sirven para escribir términos secuencia de caracteres Hola se refieren a unarios o binarios de una la misma variable, dos apariciones de la manera más cómoda. Por secuencia _ se refieren a variables distintas. ejemplo, un factor definido como operador infijo es la suma (+). Un término se compone de un factor seguido de cero a N Para referirnos a un término con argumentos entre paréntesis y el factor f y A argumentos separados por comas. Los números usamos la notación f/A. Por enteros o decimales sin ejemplo: p(a,b), p(1,f(j)), p(A,_) restricciones de tamaño también son todos ejemplos del término son términos. p/2.
  • 5. La unificación es el mecanismo mediante el cuál las variables lógicas toman valor en Prolog. El valor que puede tomar una variable consiste en cualquier término, por ejemplo, j(3), 23.2, DANDO VALOR EJEMPLOS A LAS PARADIGMÁTICOS VARIABLES Ejemplo: k(Z,Z) y k(4,H). Por culpa del primer argumento, Z se liga al valor 4. Por culpa del segundo argumento, Z y H unifican, pero como Z se liga a un valor, entonces H se liga a ese mismo valor, que es 4.
  • 6. EJECUTANDO COSAS PREDICADOS Y OBJETIVOS SECUENCIAS DE OBJETIVOS Los predicados son los elementos En Prolog los objetivos se pueden ejecutables en Prolog. En muchos combinar mediante conectivas sentidos se asemejan a los propias de la lógica de primer procedimientos o funciones típicos de orden: los lenguajes imperativos. la conjunción, la disyunción y la negación. BACKTRACKING Supongamos que PREDICADOS PREDICADO SIGNIFICADO disponemos de dos PREDEFINIDOS (BUILT- < menor que predicados p/1 y q/1 IN) que tienen varias > mayor que El más importante es la soluciones (el orden es igualdad: =/2. Este predicado =< menor o igual que significativo): tiene éxito si sus dos >= mayor o igual que p(1) tiene éxito. p(2) argumentos unifican entre sí, falla en caso contrario. Por =:= igualdad aritmética tiene éxito. q(2) tiene éxito. ejemplo, el objetivo X = 3 == desigualdad aritmética
  • 7. EL CODIGO CLÁUSULAS SIN CUERPO Cláusulas.- Los predicados se definen mediante un conjunto de Si no existen condiciones para que una cláusulas: cláusula sea cierta podemos omitir el cuerpo. En tal caso solamente escribimos la cabeza terminada en punto. Por ejemplo: edad(juan,32). edad(luis,20). Podemos escribir las cláusulas en una sola CULTURILLA línea, si no lo hacemos es por legibilidad: a :- b,c,d.
  • 8. Ejemplo simple Veamos un predica do compuesto por una simple cláusula: •es_viejo(Individuo) :- edad(Individuo,Valor), Valor > 60. Ahora invocamos el objetivo es_viejo(luis). Para ello supongamos que la edad de Luis es 32 años, es decir, el objetivo edad(luis,32) tiene éxito. Primero se unifica la cabeza de la cláusula con el objetivo. Es decir, unificamos es_viejo(luis) y es_viejo(Individuo), produciéndose la ligadura de la variable Individuo al valor luis. Como el ámbito de visibilidad de la variable es su cláusula, la lig adura también afecta al cuerpo, luego estamos ejecutando realmente: es_viejo(luis) :- edad(luis,Valor), Valor > 60. Ahora ejecutamos el cuerpo, que liga la variable Valor a 32. Pero el cuerpo falla porque el segundo objetivo falla (32>60 es falso). Entonces la cláusula falla y se produce back tracking. Como no hay más puntos de elección el objetivo falla. Es decir, Luis no es un viejo. EJEMPLO MENOS SIMPLE Ahora veamos como las ligaduras que se producen en el cuerpo de la cláusula afectan ta mbién a la cabeza. Consideramos el siguiente predicado compuesto de una única cláusula: mayor que(Fulano,Mengano) :- edad(Mengano,EdadMengano), edad(Fulano,EdadFulanano), Edad Fulano > EdadMengano. Supongamos que la edad de Juan es 20 a ños y la de Luis es 32 años. Ejecutamos el objetivo mayor_que(luis,Quien):
  • 9. El Shell es una aplicación más que podemos ejecutar en nuestro sistema operativo. En El Shell de Prolog es una aplicación que nuestro caso, la aplicación se denomina permite ejecutar objetivos y ver las ciaosh. Al ejecutarla aparece un típico ligaduras de las variables de manera mensaje de bienvenida: interactiva Ciao-Prolog 1.4 #0: Sat Nov. 27 19:27:11 1999 ?- EL SHELL DE PROLOG EJECUTANDO EL SHELL MI PRIMER OBJETIVO Los únicos objetivos que podemos ejecutar corresponden a pre dicados predefinidos en el sistema. Nuestro predicado predefinido favorito es la igualdad =/2. Así que vamos a probarlo: Ciao-Prolog 1.4 #0: Sat Nov 27 19:27:11 1999 ?- t(X,3) = t(4,Z). X = 4, Z=3?
  • 10. Una vez que hemos compilado y cargado nuestro programa vamos a estudiar sus PREDICADOS características. Una de ellas es el back REVERSIBLES tracking, o la posibilidad de obtener varias PREDICADOS NO soluciones, como ya hemos visto. REVERSIBLES 2 ?- hermano(A,B). No todos los predicados son A = Juan reversibles. Por ejemplo, los de B = Adalberto ; comparación aritmética. El A = Adalberto B = Juan ; predicado >/2 sirve para saber si A = Alberto un número es mayor que otro, B = Gerónimo ; pero no sirve para saber todos los A = Gerónimo números mayores que uno dado B = Alberto ; (puesto que son infinitos). No 3 ?-
  • 11. MI PRIMER PROGRAMA EN PROLOG Los programas se escriben en ficheros de texto, generalmente con extensión .pl. y pueden contener comentarios y código
  • 12. el código existe el predicado consult/1. CARGANDO CODIGO Recuerde que puede ser necesario indicar la ruta completa del fichero fuente