4ta tarea de sistemas expertos

13

Upload: ynina

Post on 04-Jul-2015

294 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 4ta tarea de sistemas expertos
Page 2: 4ta tarea de sistemas expertos

Este tutorial de programación en Prolog constituyela primera entrega de una serie de cursillosorientados a aquellas personas que desconocen laprogramación declarativa relacional y su lenguajerey: Prolog.

Prolog se necesitaunicamente dos cosas: *uneditor de texto y un entornode desarrollo Prolog. *Comoeditor de texto resultaaltamente recomendable eluso de Emacs.

un entorno de desarrollo Prolog se compone de:Un compilador. Transforma el código fuente en código debyte. A diferencia de Java, no existe un standard al respecto. Poreso, el codigo de byte generado por un entorno de desarrollo notiene por que funcionar en el intérprete de otro entorno.Un intérprete. Ejecuta el código de byte.Un shell o top-level. Se trata de una utilidad que per miteprobar los programas, depurarlos, etc. Su funcionamiento essimilar a los interfaces de línea de comando de los sistemasoperativos.Una biblioteca de utilidades. Estas bibliotecas son, engeneral, muy amplias. incluyen (afortunadamente) unasbibliotecas standard -ISO que permiten funcionalidadesbásicas como manipular cadenas, entrada/salida, etc.

Page 3: 4ta tarea de sistemas expertos

Como observará en breve, Prolog carece dedeclaraciones en el sentido imperativo:secciones, declaraciones de tipo, declaraciones devariable, declaraciones de procedimientos, etc.

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

Se escriben como una secuencia de caracteresalfabéticos comenzando siempre por mayúscula osubrayado.Ejemplos de variables:Variable_Hola_Pero no son variables:variable

$Holap

Page 4: 4ta tarea de sistemas expertos

todas las variables anónimas se escribenigual, son todas distintas. Es decir,mientras que dos apariciones de lasecuencia de caracteres Hola se refieren ala misma variable, dos apariciones de lasecuencia _ se refieren a variables distintas.

Un término se compone de unfactor seguido de cero a Nargumentos entre paréntesis yseparados por comas. Los númerosenteros o decimales sinrestricciones de tamaño tambiénson términos.

Para referirnos a un término conel factor f y A argumentosusamos la notación f/A. Porejemplo: p(a,b), p(1,f(j)), p(A,_)son todos ejemplos del términop/2.

Los operadores simplementesirven para escribir términosunarios o binarios de unamanera más cómoda. Porejemplo, un factor definidocomo operador infijo es lasuma (+).

Page 5: 4ta tarea de sistemas expertos

DANDO VALOR A LAS

VARIABLES

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,

EJEMPLOS PARADIGMÁTICOS

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

Page 6: 4ta tarea de sistemas expertos

EJECUTANDO COSAS

PREDICADOS Y OBJETIVOS

Los predicados son los elementosejecutables en Prolog. En muchossentidos se asemejan a losprocedimientos o funciones típicos delos lenguajes imperativos.

BACKTRACKING

Supongamos quedisponemos de dospredicados p/1 y q/1que tienen variassoluciones (el orden essignificativo):

p(1) tiene éxito. p(2)tiene éxito. q(2) tieneéxito.

PREDICADOS PREDEFINIDOS (BUILT-

IN)

El más importante es laigualdad: =/2. Este predicadotiene éxito si sus dosargumentos unifican entre sí,falla en caso contrario. Porejemplo, el objetivo X = 3

SECUENCIAS DE OBJETIVOS

En Prolog los objetivos se puedencombinar mediante conectivaspropias de la lógica de primerorden:

la conjunción, la disyunción y lanegación.

PREDICADO SIGNIFICADO

< menor que

> mayor que

=< menor o igual que

>= mayor o igual que

=:= igualdad aritmética

=\= desigualdadaritmética

Page 7: 4ta tarea de sistemas expertos

EL CODIGO

Cláusulas.- Los predicados se

definen mediante un conjunto decláusulas:

CLÁUSULAS SIN CUERPO

Si no existen condiciones para que unacláusula sea cierta podemos omitir el cuerpo.En tal caso solamente escribimos la cabezaterminada en punto. Por ejemplo:edad(juan,32).edad(luis,20).

CULTURILLAPodemos escribir las cláusulas en una solalínea, si no lo hacemos es por legibilidad: a:- b,c,d.

Page 8: 4ta tarea de sistemas expertos

Ejemplo simpleVeamos 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, esdecir, 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 estamosejecutando 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 objetivofalla (32>60 es falso). Entonces la cláusula falla y se produce back tracking. Como no hay más puntos deelección el objetivo falla. Es decir, Luis no es un viejo.EJEMPLO MENOS SIMPLEAhora 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 objetivomayor_que(luis,Quien):

Page 9: 4ta tarea de sistemas expertos

EL SHELL DE PROLOG

El Shell de Prolog es una aplicación quepermite ejecutar objetivos y ver lasligaduras de las variables de manerainteractiva

EJECUTANDO EL SHELL

El Shell es una aplicación más que podemosejecutar en nuestro sistema operativo. Ennuestro caso, la aplicación se denominaciaosh. Al ejecutarla aparece un típicomensaje de bienvenida:Ciao-Prolog 1.4 #0: Sat Nov. 27 19:27:11 1999?-

MI PRIMER OBJETIVO

Los únicos objetivos que podemos ejecutar corresponden a pre dicados predefinidosen 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 ?

Page 10: 4ta tarea de sistemas expertos

Una vez que hemos compilado y cargadonuestro programa vamos a estudiar suscaracterísticas. Una de ellas es el backtracking, o la posibilidad de obtener variassoluciones, como ya hemos visto.

2 ?- hermano(A,B).

A = Juan

B = Adalberto ;

A = Adalberto

B = Juan ;

A = Alberto

B = Gerónimo ;

A = Gerónimo

B = Alberto ;

No

3 ?-

No todos los predicados sonreversibles. Por ejemplo, los decomparación aritmética. Elpredicado >/2 sirve para saber siun número es mayor que otro,pero no sirve para saber todos losnúmeros mayores que uno dado(puesto que son infinitos).

PREDICADOS NO REVERSIBLES

PREDICADOS REVERSIBLES

Page 11: 4ta tarea de sistemas expertos

MI PRIMER PROGRAMA EN PROLOG

Los programas se escriben en ficheros de texto, generalmente conextensión .pl. y pueden contener comentarios y código

Page 12: 4ta tarea de sistemas expertos

CARGANDO CODIGO

el código existe el predicado consult/1.Recuerde que puede ser necesario indicarla ruta completa del fichero fuente

Page 13: 4ta tarea de sistemas expertos

Ejercicios de prolog