PrologIA

Post on 17-Jul-2015

48 views 0 download

Transcript of PrologIA

5/14/2018 PrologIA - slidepdf.com

http://slidepdf.com/reader/full/prologia 1/4

Inteligencia Artificial Página 1

Prolog

El Prolog (o PROLOG), proveniente del francés PROgrammation en

LOGique, es un lenguaje de programación lógico e interpretado,bastante conocido en el medio de investigación en InteligenciaArtificial.

Historia

Se trata de un lenguaje de programación ideado a principios de los años70 en la Universidad de Aix-Marseille I (Marsella,  Francia) por losprofesores Alain Colmerauer y Philippe Roussel. Nació de un proyectoque no tenía como objetivo la implementación de un lenguaje de

programación, sino el procesamiento de lenguajes naturales. Alain Colmerauer y Robert Paserotrabajaban en la parte del procesado del lenguaje natural y Jean Trudel y Philippe Roussel en la partede deducción e inferencia del sistema.Interesado por el método de resolución SL, Trudel persuadió a Robert Kowalski para que se uniera al

proyecto, dando lugar a una versión preliminar del lenguaje Prolog a finales de 1971 y apareciendo laversión definitiva en 1972. Esta primera versión de Prolog fue programada en ALGOL.Un importante factor en su difusión fue la adopción del mismo para el desarrollo del proyecto de laquinta generación de computadoras a principios de la década de los 80 en cuyo contexto se desarrollóla implementación paralelizada del lenguaje llamada KL1 y del que deriva parte del desarrollomoderno de Prolog.[1] 

Sintaxis: Hechos, Preguntas y Reglas

Los hechos son las sentencias más sencillas. Un hecho es una fórmula atómica o átomo: p(t1, ..., tn) eindica que se verifica la relación (predicado) p sobre los objetos (términos) t1, ..., tn.

Ejemplos:

es_padre(abraham, isaac) es un hecho que indica “   Abraham es padre de Isaac”  

es_hombre(abraham)

es un hecho que indica “   Abraham es un hombre”  

suma(3,2,5) es un hecho que indica “  la suma de 3 y 2 es 5 ”  

Un conjunto de hechos constituye un programa (la forma más simple de programa lógico) que puedeser visto como una base de datos que describe una situación.

Todos los hechos de este programa son hechos de base (sin variables), pero también se puedenintroducir hechos con variables como axiomas, por ejemplo: suma(0, X, X). En ellos, las variables seconsideran cuantificadas universalmente. Es decir, x suma(0, x, x).Al igual que el hecho es_mujer(sarah) establece la verdad de la sentencia "Sarah es mujer", el hechosuma(0, X, X) establece la verdad para cualquier valor que pueda tomar la variable, es decir, nos diceque "para todo término x, la suma de 0 con x es x" . Equivale a un conjunto de hechos de base como

serían: suma(0, 1, 1), suma(0, 2, 2), etc.

2012

Universidad de Cuenca

  Holger Coronel

  Inteligencia

Artificial

5/14/2018 PrologIA - slidepdf.com

http://slidepdf.com/reader/full/prologia 2/4

Inteligencia Artificial Página 2

Estas preguntas sencillas se llaman fines. Como puede verse en la lectura de las preguntas, en éstas seconsideran las variables cuantificadas existencialmente. También se pueden hacer preguntas máscomplejas, como conjunción de fines, de la forma:

? es_padre(haran,lot), es_hombre(lot).

 ¿es padre Haran de Lot y es hombre Lot? 

? es_padre(abraham,lot), es_hombre(lot). ¿es padre Abraham de Lot y es hombre Lot? 

? es_padre(abraham,X), es_hombre(X).

? es_padre(haran,X), es_mujer(X).

 ¿Existe un X tal que es padre Abraham de X y es hombre X? 

 ¿Existe un X tal que es padre Haran de X y es mujer X? 

Las reglas son sentencias de la forma: A :- B1 , ... , Bn . Donde A y cada Bi son átomos. A es la cabeza dela regla y los Bi's componen el cuerpo de la regla.

Expresiones

Prolog cuenta con operadores para la unificación y comparación, sea con evaluación o sea simbólica,

como los siguientes:X is Y %unificación con evaluación.X = Y  %unificación simbólicaX=:=Y  %comparación con evaluaciónX == Y %comparación simbólica.?- X is 3+5.

X = 8

?- X = 3+5.X = 3+5

?- 3+5 =:= 2+6.yes

?- 3+5 == 2+6.no

?- 3+5 == 3+5.yes

 

5/14/2018 PrologIA - slidepdf.com

http://slidepdf.com/reader/full/prologia 3/4

Inteligencia Artificial Página 3

Estructuras de Control [3] 

En Prolog, no existen estructuras de control para bucles. Éstos se implementan mediante predicadosrecursivos.

El “AND” o Y lógico se representa en Prolog mediante la coma ‘,’.

El“

OR”

o O lógico se puede realizar en Prolog de dos formas distintas: mediante varias cláusulas paraun mismo predicado o mediante el operador ‘;’.

Mediante varias cláusulas se consigue poniendo cada una de las opciones en una cláusula distinta delpredicado. Entre las distintas cláusulas de un mismo predicado se puede considerar que existe un “OR”.

La negación NOT se realiza mediante el predicado not. El predicado not/1 antes de la llamada a unpredicado P cambia su valor de verdad, es decir, si el predicado P tiene éxito, not(P) fallará y si elpredicado P falla, not(P) tendrá éxito.

Ej.

no_entero(X):-

not(integer(X)).

El predicado de fallo, fail, se utiliza para obligar al Prolog a dar un fallo.

El predicado cierto, true, se utiliza como instrucción nula, es decir, cuando se tiene que escribiruna instrucción pero no se quiere que haga nada.

Un ejemplo típico es para imitar las instrucciones if-then:

cero(X):- (X == 0, write(‘Cero’); true ).

IDE para la programacion de prolog [2]

Existen varios tipos de IDEs disponibles para lo que es la programación en prolog entre ellos tenemos:SWI-Prolog-Editor

winprolog

visualprolog

Compiladores e Intérpretes Prolog [2] 

Páginas de los principales compiladores e intérpretes de Prolog. Se pueden encontrar los propioscompiladores y diverso material en Prolog.

SWI Prolog. Prolog de dominio público.

 Amzi Prolog. Prolog comercial, pero tiene versiones para uso personal sin coste.

Sicstus Prolog. Prolog comercial. La página contiene numeroso material en Prolog y variosenlaces interesantes.

Eclipse.

GNU Prolog. Para Linux. Además permite manejar restricciones y sockets.

Ejemplo en codigo Prolog [1] 

%%

%% declaraciones%%

5/14/2018 PrologIA - slidepdf.com

http://slidepdf.com/reader/full/prologia 4/4

Inteligencia Artificial Página 4

padrede('juan', 'maria'). % juan es padre de mariapadrede('pablo', 'juan'). % pablo es padre de juanpadrede('pablo', 'marcela').padrede('carlos', 'debora').

% A es hijo de B si B es padre de Ahijode(A,B) :- padrede(B,A).% A es abuelo de B si A es padre de C y C es padre Babuelode(A,B) :-

padrede(A,C),padrede(C,B).

% A y B son hermanos si el padre de A es también el padre de B y si A y B no son lo mismohermanode(A,B) :-

padrede(C,A) ,padrede(C,B),A \== B.

% A y B son familiares si A es padre de B o A es hijo de B o A es hermano de B

familiarde(A,B) :-padrede(A,B).

familiarde(A,B) :-hijode(A,B).

familiarde(A,B) :-hermanode(A,B).

%%%% consultas

%%% juan es hermano de marcela? 

?- hermanode('juan', 'marcela').yes

% carlos es hermano de juan? ?- hermanode('carlos', 'juan').no

% pablo es abuelo de maria? ?- abuelode('pablo', 'maria').yes

% maria es abuela de pablo? ?- abuelode('maria', 'pablo').

no

Bibliografía

http://es.wikipedia.org/wiki/Prolog[1] 

http://www.uv.es/fbarber/prolog.html [2] http://www.slideshare.net/guest4046188/estructuras-de-control-prolog-presentation  [3]