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 Inteligencia Artificial. Historia Se trata de un lenguaje de programación ideado a principios de los años 70 en la Universidad de Aix-Marseille I (Marsella,  Francia) por los  profesores Alain Colmerauer y Philippe Roussel. Nació de un proyecto  que no tenía como objetivo la implementación de un lenguaje de programación, sino el procesamiento de lenguajes naturales. Alain Colmerauer y Robert Pasero trabajaban en la parte del procesado del lenguaje natural y Jean Trudel y Philippe Roussel en la parte de 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 la versió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 la quinta generación de computador as a principios de la década de los 80 en cuyo context o se desarrolló la implementación paralelizada del lenguaje llamada KL1 y del que deriva parte del desarrollo moderno 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) e indica que se verifica la relación (predicado) p sobr e los objetos (término s) 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 puede ser visto como una base de datos qu e describe una situación. Todos los hechos de este programa son hechos de base (sin variables), pero también se pueden  introdu cir hechos con variables como axiomas, por ejemplo: suma(0 , X, X). En ellos, las variables se consideran 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 hecho  suma(0, X, X) establece la verdad para cualquier valor que pueda tomar la variable, es decir, nos dice que "para todo tér mino x, la suma de 0 con x es x" . Equiv ale 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

PrologIA

Embed Size (px)

Citation preview

Page 1: 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

Page 2: PrologIA

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

 

Page 3: PrologIA

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%%

Page 4: PrologIA

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]