Sunteți pe pagina 1din 4

2012

Universidad de Cuenca Holger Coronel Inteligencia Artificial

Prolog El Prolog (o PROLOG), proveniente del francs PROgrammation en LOGique, es un lenguaje de programacin lgico e interpretado, bastante conocido en el medio de investigacin en Inteligencia Artificial.

Historia Se trata de un lenguaje de programacin ideado a principios de los aos 70 en la Universidad de Aix-Marseille I (Marsella, Francia) por los profesores Alain Colmerauer y Philippe Roussel. Naci de un proyecto que no tena como objetivo la implementacin de un lenguaje de programacin, 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 deduccin e inferencia del sistema. Interesado por el mtodo de resolucin SL, Trudel persuadi a Robert Kowalski para que se uniera al proyecto, dando lugar a una versin preliminar del lenguaje Prolog a finales de 1971 y apareciendo la versin definitiva en 1972. Esta primera versin de Prolog fue programada en ALGOL. Un importante factor en su difusin fue la adopcin del mismo para el desarrollo del proyecto de la quinta generacin de computadoras a principios de la dcada de los 80 en cuyo contexto se desarroll la implementacin 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 ms sencillas. Un hecho es una frmula atmica o tomo: p(t1, ..., tn) e indica que se verifica la relacin (predicado) p sobre los objetos (trminos) 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 ms simple de programa lgico) que puede ser visto como una base de datos que describe una situacin. Todos los hechos de este programa son hechos de base (sin variables), pero tambin se pueden introducir 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 trmino x, la suma de 0 con x es x" . Equivale a un conjunto de hechos de base como seran: suma(0, 1, 1), suma(0, 2, 2), etc.

Inteligencia Artificial

Pgina 1

Estas preguntas sencillas se llaman fines. Como puede verse en la lectura de las preguntas, en stas se consideran las variables cuantificadas existencialmente. Tambin se pueden hacer preguntas ms complejas, como conjuncin 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 de la regla y los Bi's componen el cuerpo de la regla.

Expresiones Prolog cuenta con operadores para la unificacin y comparacin, sea con evaluacin o sea simblica, como los siguientes: X is Y %unificacin con evaluacin. X = Y %unificacin simblica X=:=Y %comparacin con evaluacin X == Y %comparacin simblica. ?- 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

Inteligencia Artificial

Pgina 2

Estructuras de Control [3] En Prolog, no existen estructuras de control para bucles. stos se implementan mediante predicados recursivos. El AND o Y lgico se representa en Prolog mediante la coma ,. El OR o O lgico se puede realizar en Prolog de dos formas distintas: mediante varias clusulas para un mismo predicado o mediante el operador ;. Mediante varias clusulas se consigue poniendo cada una de las opciones en una clusula distinta del predicado. Entre las distintas clusulas de un mismo predicado se puede considerar que existe un OR. La negacin NOT se realiza mediante el predicado not. El predicado not/1 antes de la llamada a un predicado P cambia su valor de verdad, es decir, si el predicado P tiene xito, not(P) fallar y si el predicado 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 instruccin nula, es decir, cuando se tiene que escribir una instruccin pero no se quiere que haga nada. Un ejemplo tpico 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 programacin en prolog entre ellos tenemos: SWI-Prolog-Editor winprolog visualprolog

Compiladores e Intrpretes Prolog [2] Pginas de los principales compiladores e intrpretes de Prolog. Se pueden encontrar los propios compiladores y diverso material en Prolog. SWI Prolog. Prolog de dominio pblico. Amzi Prolog. Prolog comercial, pero tiene versiones para uso personal sin coste. Sicstus Prolog. Prolog comercial. La pgina contiene numeroso material en Prolog y varios enlaces interesantes. Eclipse. GNU Prolog. Para Linux. Adems permite manejar restricciones y sockets.

Ejemplo en codigo Prolog [1] %% %% declaraciones %%

Inteligencia Artificial

Pgina 3

padrede('juan', 'maria'). % juan es padre de maria padrede('pablo', 'juan'). % pablo es padre de juan padrede('pablo', 'marcela'). padrede('carlos', 'debora'). % A es hijo de B si B es padre de A hijode(A,B) :- padrede(B,A). % A es abuelo de B si A es padre de C y C es padre B abuelode(A,B) :padrede(A,C), padrede(C,B). % A y B son hermanos si el padre de A es tambin el padre de B y si A y B no son lo mismo hermanode(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

Bibliografa 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]

Inteligencia Artificial

Pgina 4

S-ar putea să vă placă și