Sei sulla pagina 1di 9

FUNDAMENTOS DE PROLOG OBJETIVOS: Conocer un lenguaje de programacin lgica Conocer el programa utilizando un lenguaje de programacin lgica Aplica la lgica

ica de predicados en la programacin lgica

DESARRROLLO Realizar la descarga de alguna versin de prolog Realizar la intalacion de prolog en un equipo

Conocer las caractersticas del software instalado El Prolog (o PROLOG), proveniente del francs PROgrammation en LOGique, 1 es un lenguaje de programacin lgico e interpretado 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 PhilippeRoussel. 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 PhilippeRoussel 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 19712 y apareciendo la versin definitiva en 1972.3 Esta primera versin de Prolog fue programada en ALGOL W. Inicialmente se trataba de un lenguaje totalmente interpretado hasta que, en 1983, David H.D. Warren desarroll un compilador capaz de traducir Prolog en un conjunto de instrucciones de una mquina abstracta denominada Warren Abstract Machine, o abreviadamente, WAM. Desde entonces Prolog es un lenguaje semi-interpretado. Las primeras versiones del lenguaje diferan, en sus diferentes implementaciones, en muchos aspectos de sus sintaxis, emplendose mayormente como forma normalizada el dialecto propuesto por la Universidad de Edimburgo6 , hasta que en 1995 se estableci un estndar ISO (ISO/IEC 13211-1), llamado ISO-Prolog. Prolog se enmarca en el paradigma de los lenguajes lgicos y declarativos, lo que lo diferencia enormemente de otros lenguajes ms populares tales como Fortran, Pascal, C o Java. Conocer la forma de realizar la representacin de los siguientes incisos en la version de prolog instalada. o HECHOS Una parte importante de los programas enprolog son los hechos, formados por combinacin de predicados y constantes: progenitor(juan,luis). progenitor(juan,maria). progenitor(luis,carlos) progenitor(luis,laura). Expresan relaciones entre objetos. Supongamos que queremos expresar el hecho de que "un coche tiene ruedas". Este hecho, consta de dos objetos, "coche" y "ruedas", y de una relacin llamada "tiene". La forma de representarlo en PROLOG es: tiene(coche,ruedas). * Los nombres de objetos y relaciones deben comenzar con una letra minscula. * Primero se escribe la relacin, y luego los objetos separados por comas y encerrados entre parntesis. * Al final de un hecho debe ir un punto (el caracter "."). El orden de los objetos dentro de la relacin es arbitrario, pero debemos ser coherentes a lo largo de la base de hechos. o REGLAS Las reglas se utilizan en PROLOG para significar que un hecho depende de uno mas hechos. Son la representacin de las implicaciones lgicas del tipo p ---> q (p implica q). * Una regla consiste en una cabeza y un cuerpo, unidos por el signo ":-". * La cabeza est formada por un nico hecho. * El cuerpo puede ser uno o ms hechos (conjuncin de hechos), separados por una coma (","), que acta como el "y" lgico. * Las reglas finalizan con un punto ("."). La cabeza en una regla PROLOG corresponde al consecuente de un implicacin lgica, y el cuerpo al antecedente. Este hecho puede conducir a errores de representacin. Supongamos el

siguiente razonamiento lgico: tiempo(lluvioso) ----> suelo(mojado) suelo(mojado) Que el suelo est mojado, es una condicin suficiente de que el tiempo sea lluvioso, pero no necesaria. Por lo tanto, a partir de ese hecho, no podemos deducir mediante la implicacin, que est lloviendo (pueden haber regado las calles). La representacin *correcta* en PROLOG, sera: suelo(mojado) :- tiempo(lluvioso). suelo(mojado). Advirtase que la regla est "al revs". Esto es as por el mecanismo de deduccin hacia atrs que emplea PROLOG. Si cometiramos el *error* de representarla como: tiempo(lluvioso) :- suelo(mojado). suelo(mojado). PROLOG, partiendo del hecho de que el suelo est mojado, deducira incorrectamente que el tiempo es lluvioso.Para generalizar una relacin entre objetos mediante una regla, utilizaremos variables. Por ejemplo: Representacin lgica | Representacin PROLOG ----------------------------------+-----------------------------------es_un_coche(X) ----> | tiene(X,ruedas) :tiene(X,ruedas) | es_un_coche(X). Con esta regla generalizamos el hecho de que cualquier objeto que sea un coche, tendr ruedas. Al igual que antes, el hecho de que un objeto tenga ruedas, no es una condicin suficiente de que sea un coche. Por lo tanto la representacin inversa sera incorrecta. El mbito de las variables. --------------------------Cuando en una regla aparece una variable, el _mbito_ de esa variable es nicamente esa regla. Supongamos las siguientes reglas: (1) hermana_de(X,Y) :- hembra(X), padres(X,M,P), padres(Y,M,P). (2) puede_robar(X,P) :- ladron(X), le_gusta_a(X,P), valioso(P). Aunque en ambas aparece la variable X (y la variable P), no tiene nada que ver la X de la regla (1) con la de la regla (2), y por lo tanto, la instanciacin de la X en (1) no implica la instanciacion en (2). Sin embargo todas las X de *una misma regla* s que se instanciar n con el mismo valor. o ARGUMENTOS Los argumentos en una clusula pueden ser cualquier trmino de Prolog. Los trminos de Prolog son los siguientes: Atomos Enteros Reales Estructuras Listas Variables o TOMOS Los tipos de datos elementales en Prolog son los enteros y tomos. Los enteros se escriben en la forma usual, como una secuencia de dgitos decimales precedidos posiblemente de un signo. Un tomo puede ser cualquier secuencia de smbolos del conjunto de caracteres ASCII y hace el papel de una constante no evaluada o una cadena de caracteres. Los siguientes son

ejemplos de tomos en Prolog: alfa nombre integral abuelo Adems, los tomos que contienen smbolos especiales o comienzan con una letra mayscula (A-Z) deben encerrarse entre apstrofos() siempre que puedan confundirse con nombres de variables u otras marcas de puntuacin que aparezcan dentro de un programa en Prolog; ejemplos: Alfa, Juan Lpez. Principalmente, los tomos se utilizan para denominar valores de datos y se utilizan tambin para los nombres de funciones y operadores definidos por el programador. Algunos tomos en Prolog estn predefinidos en el lenguaje y, como tales, no se utilizan generalmente para ningn otro propsito. Los tomos (o constantes simblicas) pueden tomar los siguientes nombres: Cadenas de letras, dgitos y guin bajo, comenzando por una letra minscula: juan, x, el_pais Cadenas de caracteres especiales: + - * / <> = : .& _ ~: <===>, --->, .:., ::=, ... Cadenas de caracteres entre comillas simples: 'El_Salvador', 'Nueva_Guinea', 'Juan' o UNIFICACIN La unificacin, como ya se ha comentado, es el algoritmo que se encarga de resolver las igualdades lgicas. Aunque la unificacin en Prolog sustituye a la asignacin de los lenguajes procedurales, no hay que confundirla con esta, son operaciones totalmente distintas. La operacin de unificacin se representa mediante el operador =. CONOCER LA FORMA DE GENERAR LOS ARCHIVOS EN PROLOG Acabamos ver que SWI-Prolog trabaja con archivos de texto en formato ASCII. Cada archivo contiene un programa o un mdulo de sentencias Prolog. La composicin bsica de un programa Prolog viene dada por dos secciones, ambas opcionales: Clusulas : Clusulas definidas del programa (hechos y reglas) Comandos : Objetivos a plantear al sistema Veamos con ms detalle cada una de ellas. Clusulas Las clusulas del programa constan de los hechos y las reglas, terminados con un punto cada uno. Los predicados no se declaran, con lo que los tipos de sus argumentos pueden variar de una invocacin a otra. Obviamente si se emplean operadores propios de un tipo de datos (por ejemplo, aritmticos) sobre otro tipo (constantes simblicas en vez de nmeros) se producir un error de ejecucin. Sintaxis: Hechos: nombre_predicado(arg1, , argn). Reglas: nombre_predicado(arg1,,argn): pred1(...),...,predm(...). NOTA: Los hechos y reglas con el mismo nombre deben de ir correlativos en el programa. NOTA2: No puede haber espacios entre el nombre de predicado y el carcter (. Comandos Un comando es un Goal (objetivo) de la forma: :- goal1,, goaln. % n>=1

Cuando el intrprete se encuentra con un objetivo durante la compilacin, ste es ejecutado inmediatamente. Ej: :- abuelo(X,Y).:- write('Hola Mundo!'),nl. Los objetivos as planteados se diferencian de los objetivos planteados directamente desde la consola en dos aspectos: 1. Prolog busca slo la primera solucin para ellos. 2. Prolog no muestra el resultado de resolver estos objetivos. CONOCER LA FORMA DE INTRODUCIR LOS HECHOS Y LAS REGLAS Hechos: Son clausulas de Horn que poseen un nico predicado en la cabeza y ninguno en el cuerpo. Tienen la siguiente forma en sintaxis de lgica de primer orden: P En Prolog no se escribe la flecha sino que se pone un punto al final: p. donde p es un predicado y tiene que seguir su sintaxis. Ej: padre(aaron, maria). compositor(shostakovich). shostakovich(compositor). Reglas: Son clausulas de Horn que poseen un nico predicado en la cabeza y uno o mas en el cuerpo. Tienen la siguiente pinta: P Q1,Q2,Q3 escritos en sintaxis clausular o P Q1 ^ Q2 ^ Q3 escritos en sintaxis de logica de primer orden. En Prolog la flecha se sustituye por :-, las conectivas conjuntivas se escriben como comas , y la regla termina en punto: p :- q1, q2, q3. Donde, al igual que los hechos, p y q1, q2 y q3 son predicados. Ej: cuadrado(X) :- poligono(X), numero_lados(X,4). EJECUTAR LOS EJERCICIOS DE LA PRESENTACIN PROLOGMINI

CONCLUSIONES

Potrebbero piacerti anche