0 evaluări0% au considerat acest document util (0 voturi)
95 vizualizări13 pagini
El documento describe Prolog, un lenguaje de programación lógica desarrollado en los años 1970. Prolog se basa en el paradigma declarativo y lógico, lo que significa que los programas describen relaciones y hechos en lugar de algoritmos imperativos. Prolog puede usarse para la inteligencia artificial y los sistemas expertos debido a su capacidad para resolver problemas mediante deducción lógica. El documento explica las características, usos, ventajas y desventajas de Prolog.
El documento describe Prolog, un lenguaje de programación lógica desarrollado en los años 1970. Prolog se basa en el paradigma declarativo y lógico, lo que significa que los programas describen relaciones y hechos en lugar de algoritmos imperativos. Prolog puede usarse para la inteligencia artificial y los sistemas expertos debido a su capacidad para resolver problemas mediante deducción lógica. El documento explica las características, usos, ventajas y desventajas de Prolog.
El documento describe Prolog, un lenguaje de programación lógica desarrollado en los años 1970. Prolog se basa en el paradigma declarativo y lógico, lo que significa que los programas describen relaciones y hechos en lugar de algoritmos imperativos. Prolog puede usarse para la inteligencia artificial y los sistemas expertos debido a su capacidad para resolver problemas mediante deducción lógica. El documento explica las características, usos, ventajas y desventajas de Prolog.
Prolog y sus Antecedentes ...................................................................................... 2
Paradigma de Programacin ................................................................................... 4 Descripcin .............................................................................................................. 4 Ventajas .................................................................................................................. 5 Desventajas ............................................................................................................. 6 Uso de Prolog .......................................................................................................... 7 Inteligencia artificial .............................................................................................. 7 Sistemas expertos................................................................................................ 7 Compiladores ....................................................................................................... 8 Estructura de un programa en Prolog ..................................................................... 8 Operadores Aritmticos ........................................................................................... 9 Operadores lgicos ................................................................................................. 9 Variables ................................................................................................................. 9 Ejemplos................................................................................................................ 10 Principales compiladores e intrpretes de Prolog ................................................. 12 Bibliografa ............................................................................................................ 13
2 Prolog y sus Antecedentes El Prolog o PROLOG, proviene del francs PROgrammation en LOGique (programacin en lgica), es un lenguaje para programas artefactos electrnicos mediante el paradigma lgico con tcnicas de produccin final interpretada, es bastante conocido en el rea de la Ingeniera Informtica para investigacin en inteligencia artificial. 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 Colmeraurer y Philippe Roussel. Naci de un proyecto que no tena como objetivo la implementacin de un lenguaje de programacin, si no el procedimiento de lenguajes naturales Alain Colmeraurer 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 W. Inicialmente se trataba de un lenguaje totalmente interpretado hasta que, en 1983, David H.D. Warren desarrollo un compilador capaz de traducir Prolog en un conjunto de instrucciones en un conjunto de una maquina abstracta denominada Warren Abstrac Machine, o abreviadamente, WAM. Desde entonces Prolog es un lenguaje semi-interpretado. Si bien en un principio se trataba de un lenguaje de uso reducido, la aparicin de intrpretes del mismo para microordenadores de 8 bits (ej.: micro-PROLOG) y para ordenadores domsticos de 16 bits (ej.: Turbo Prolog de Borland, entre muchos otros) a lo largo de la dcada de 1980 contribuyo notablemente a su popularizacin. Otro 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
3 implementacin paralelizada del lenguaje llamada KL1 Y del que deriva parte del desarrollo moderno Prolog. Las primeras versiones del lenguaje diferirn, en sus diferentes implementaciones, en muchos aspectos de sus sintaxis, emplendose mayormente como forma normalizada el dialecto propuesto por la universidad de Edimburgo, 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 como Fortran, Pascal, C o Java. En los lenguajes de programacin antes mencionados, las instrucciones se ejecutan normalmente en orden secuencial, es decir, una a continuacin de otra, en el mismo orden en que estn escritas, que solo varia cuando se alcanza una instruccin de control (un bucle, una instruccin condicional o una transferencia). Los programas en Prolog se componen de clusulas de Horn que constituyen reglas del tipo modus ponendo ponens, es decir, si es verdad el antecedente, entonces es verdad el consecuente. No obstante, la forma de escribir las clusulas de Horn es al contrario de lo habitual. Primero se escribe el consecuente y luego el antecedente. El antecedente puede ser una conjuncin de condiciones que se denomina secuencia de objetivos. Cada objetivo se separa con una coma y puede considerarse similar a una instruccin o llamada a procedimiento de los lenguajes imperativos. En Prolog no existen instrucciones de control. Su ejecucin se basa en dos conceptos; la unificacin y el Back Tracking. Gracias a la unificacin, cada objetivo determina un subconjunto de clusulas susceptibles de ser ejecutadas. Cada una ellas se denominan punto de eleccin. Prolog selecciona el primer punto de eleccin y sigue ejecutando el programa hasta determinar si el objetivo es verdadero o falso. En caso de ser falso entra en juego el back tracking, que consiste en deshacer todo lo ejecutado situado en el mismo estado en el que estaba justo antes de
4 llegar al punto de eleccin. Entonces se toma el siguiente punto de eleccin que estaba pendiente y se repite de nuevo el proceso. Todos los objetivos terminan en su ejecucin bien en xito (verdadero), bien en fracaso (falso). (Cruz, 2012) Paradigma de Programacin Cuando se piensa en programacin, lo que usualmente viene a la mente son funciones, ciclos, condicionales y variables. Conocemos los lenguajes C, C++, Java, C# y dems. Pensamos en algoritmos; una secuencia de pasos apoyados por estructuras de control. El paradigma Imperativo de programacin es sin duda, el ms utilizado y conocido por la mayora de la gente. Pocas veces nos imaginamos un lenguaje de programacin en donde no necesitemos decirle a la computadora una secuencia de instrucciones; donde el flujo de control sea irrelevante y no necesitemos de For, If, llamadas a mtodos y dems artilugios de la programacin imperativa. El prolog usa el paradigma de programacin declarativo, lleva este nombre porque el programador declara lo que debe resultar del cmputo; en contraste con ordenar como se debe llegar al resultado. Es decir, describimos el problema de implementar un algoritmo para su solucin. Una rama del paradigma declarativo es la programacin lgica; estrechamente ligada a la inteligencia artificial. Programacin lgica significa definir hechos y relaciones combinados con lgica matemtica para describir la solucin al problema. Prolog es probablemente el lenguaje lgico ms conocido en la actualidad. Actualmente existen muchas implementaciones de prolog, las cuales pueden ser descargadas, como SWI-Prolog. (Ferreira, 2012) Descripcin Prolog es un lenguaje simple, pero poderoso. Se basa en nociones matemticas de relaciones de inferencia. Es un lenguaje declarativo e interpretado, esto quiere
5 decir que el lenguaje se usa para representar conocimientos sobre un determinado dominio y las relaciones entre objetos de ese dominio. Un programa en prolog consiste de una base de datos de relaciones lgicas y detalles que se cumplen para la aplicacin. Dicha base de datos no tiene una estructura impuesta, ni un procedimiento o clase principal. Los datos y relaciones de un programa en Prolog se escriben en un nico archivo, el cual es consultado por el programa cuando se le hace una pregunta. Escribir un programa en prolog consiste en declarar el conocimiento disponible acerca de los objetos adems de sus relaciones y sus reglas. En lugar de correr en un programa para obtener una solucin, se hace una pregunta, el programa revisa la base de datos para encontrar la solucin a la pregunta. Si existe ms de una solucin, Prolog hace Back tracking para encontrar soluciones distintas. El propio sistema es el que deduce las respuestas a las preguntas que se le plantean, dichas respuestas las deduce del conocimiento obtenido por el conjunto de reglas dadas. La ejecucin de Prolog consiste en una bsqueda en profundidad de un rbol conteniendo todas las posibles soluciones. Para cada una de ellas se evaluara su validez. La estructura de un programa en Prolog es lgica y directa. (Kathryn M. Jones Prez, 2007) Ventajas La habilidad de PROLOG para calcular de forma procedural es una de las ventajas especficas que tiene el lenguaje. Como consecuencia esto anima al programador a considerar el significado declarativo de los programas de forma relativamente independiente de su significado procedural. Es decir, las ventajas de la forma declarativa de este lenguaje son claras (es ms fcil pensar las soluciones y muchos detalles procedurales son resueltos automticamente por el propio lenguaje) y podemos aprovecharlas. Una ventaja desde el punto de vista del usuario es la facilidad para programar ya que se pueden escribir programas rpidamente, con pocos
6 errores originando programas claramente legibles, aun si no se conoce muy bien el lenguaje. No hay que pensar demasiado en la solucin del problema, ya que Prolog infiere sus respuestas basndose en las reglas declaradas dentro del programa. Modularidad; cada predicado (procedimiento) puede ser ejecutado, validado y examinado independiente e individualmente. Prolog no tiene variables globales, ni asignacin. Cada relacin esta auto contenida, lo que permite una mayor modularidad, portabilidad y reusabilidad de relaciones entre programas. Polimorfismo; se trata de un lenguaje de programacin sin tipos, lo que un alto nivel de abstraccin e independencia de los datos (objetos). En Prolog, se puede representar incluso los mismos programas Prolog como estructuras. Prolog utiliza un mecanismo de bsqueda independiente de la base de hechos. Aunque pueda parecer algo retorcido, es una buena estrategia puesto que garantiza el proceso de todas las posibilidades. Es til para el programador conocer dicho mecanismos a la hora de depurar y optimizar los programas. Manejo dinmico y automtico de memoria. En Prolog se utiliza notacin prefija e infija mientras que en Lisp solo utiliza notacin prefija. Desventajas La resolucin automtica no siempre es eficiente, por lo que eventualmente se podra dar respuesta incorrecta a una consulta. Poco eficiente. Poco utilizado en aplicaciones reales. Prolog algunas veces es incapaz de reconocer que un problema es (para su propio conocimiento) inaplicable o insuficiente. Si el programa no contiene
7 suficiente informacin para contestar una consulta, es incapaz de reconocerlo y responde no. En esta situacin ser ms eficiente conocer que la respuesta no es negativa, si no que no es posible inferir un resultado. Los motores de inferencia poseen algunos lmites (Prolog (Programacion Logica)). Ciertos problemas estn ligados a la representacin del conocimiento, que prolog no posee. (Kathryn M. Jones Prez, 2007) Uso de Prolog Prolog se puede utilizar para resolver, bsicamente cualquier tipo de problema. Principalmente es til en la gestin de juegos, en inteligencia artificial y sistemas expertos, como lenguaje especialmente pensado para construir bases de conocimientos basados en la lgica que forman parte importante de cualquier agente inteligente, en la construccin de Compiladores e intrpretes, en el reconocimiento del Lenguaje Natural, tambin en diversos campos, incluyendo finanzas, defensa, telecomunicaciones, medicina, agricultura, ingeniera, manufactura y educacin. As mismo tambin como interfaces de idiomas en los que busca en la base de datos para responder un pregunta. Inteligencia artificial La resolucin de juegos y la planificacin as como la construccin de agentes inteligentes constituyen amplios campos que abarca la rama de la inteligencia artificial. La facilidad con la que se pueden plasmar especificaciones de los problemas directamente, utilizando una sintaxis que nos proporciona un alto grado de abstraccin. Esto aporta una gran ventaja a la hora de realizar el desarrollo de la aplicacin una vez analizando el problema y diseada su solucin. Sistemas expertos Los agentes y sistemas expertos se pueden considerar entes capaces de actuar como lo hara un experto humano en la resolucin de un determinado problema. Pueden percibir el ambiente mediante sensores y actan sobre ese ambiente por
8 medio de efectores. En los agentes hardware, los sensores son sustituidos por cmaras y telmetros y los efectores reemplazados mediante motores. En los agentes software, las precepciones y acciones vienen a ser las cadenas de bits codificados. Compiladores La comprensin del lenguaje natural y la construccin de compiladores e intrpretes son campos de desarrollo muy adecuados para Prolog. En Prolog se puede especificar un autmata finito mediante tres hechos, simplemente. El predicado inicial, inicial (Q), es true si Q es el estado inicial. El predicado final (Q) es true si Q es el estado final. Y el predicado delta (Q, X, Q1) que funciona del siguiente modo: es true si el autmata cambia del estado Q al estado Q1 al recibir el smbolo X. El autmata recibe una cadena de smbolos del alfabeto S *. El autmata reconoce el lenguaje si comenz en el estado inicial y acab en el estado final tras seguir las transiciones especificadas por. (Aplicaciones al Lenguaje Prolog) Estructura de un programa en Prolog La sintaxis de prolog incluye; Hechos: es un hecho del lenguaje cotidiano. En el lenguaje normal, una proposicin puede ser hace calor. Reglas: las capacidades del programa. Estas son consultadas al hacer una consulta para verificar su validez o invalidez. Variables: representan objetos que el mismo Prolog determina. Una variable puede estar instanciada o no instanciada. Consultas: es la accin de hacerle una pregunta al programa sobre la informacin contenida en la base de datos. Una pregunta podra sencilla podra ser: ?- hace calor. Una respuesta podra ser; si, seguido por el prompt; ?-. Un si significa que la pregunta es consistente con la
9 informacin contenida en la base de datos. Si no existe suficiente, responde: no. (Kathryn M. Jones Prez, 2007) Operadores Aritmticos +: Suma -: Resta *: Multiplicacin /: Divisin //: Divisin de enteros (truncada) Mod: Resto de la divisin **: Potenciacin. Operadores lgicos Not: Negacin \+: no probable , : conjuncin lgica ; : disyuncin lgica :- : implicacin lgica -> : If- then else Variables Las variables se utilizan para describir hechos y reglas generales. Los nombres de las variables deben comenzar con letra mayscula o con el carcter (_). Existe una variable especial, la variable annima o blanca. Esta variable se utiliza de la misma manera que las dems variables pero nunca toma ningn valor.
10 Ejemplos 1. Parentesco padrede('juan', 'maria'). % juan es padre de maria padrede('pablo', 'juan'). % pablo es padre de juan padrede('pablo', 'marcela'). % pablo es padre de marcela padrede('carlos', 'debora'). % carlos es padre de devora % 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?
11 ?- hermanode('juan', 'marcela'). yes % carlos es hermano de juan? ?- hermanode('carlos', 'juan'). no % pablo es abuelo de maria? ?- abuelode('pablo', 'maria'). Yes 2. Factorial
% La sintaxis es factorial(N, F) -> Factorial de N es F (el resultado se guarda en F) factorial(0, 1). factorial(1, 1). factorial(N, F) :- N>0, N1 is N - 1, factorial(N1, F1), F is N * F1. %el factorial se llama recursivamente dejando el resultado en F
3. Sobre una base de datos de contribuyentes, queremos definir los contribuyentes normales como aquellos que; No son extranjeros. Si estn casados, su cnyuge no ingresa ms de 2000. En otro caso, sus ingresos propios estn entre 700 y 2000. Solucin; cont_normal(X) :- extranjero(X), ! , fail. cont_normal(X) :- casado(X,Y) , ingresos(Y,Ing), Ing>2000 , ! , fail. cont_normal(X) :- ingresos(X,Ing) , Ing>700, Ing<2000.
12 Principales compiladores e intrpretes de Prolog Para que el uso de programas lgicos pueda aplicarse al desarrollo de software moderno, es necesario que sean verdaderos componentes lgicos que puedan utilizarse desde entornos como .NET, JSP, Delphi, Java, etc. Muchas implementaciones actuales de Prolog proveen mecanismos para invocar programas Prolog desde otros ambientes. El entorno Amzi! Prolog + Logic Server brinda una integracin total multiplataforma con los ambientes ms conocidos. Adems, podemos invocar desde Prolog rutinas hechas en otros lenguajes, mediante predicados extendidos (as Prolog puede actualizar, por ejemplo, el estado de un botn en pantalla habilitndolo o no dependiendo de un complejo conjunto de relaciones lgicas). Naturalmente, existen diversos IDEs muy completos para el desarrollo de programas Prolog: El Amzi! Utiliza Eclipse, muy conocido por la comunidad Java.
13 Bibliografa Aplicaciones al Lenguaje Prolog. (s.f.). Recuperado el 24 de Mayo de 2014, de http://www.uhu.es/nieves.pavon/pprogramacion/temario/tema4/tema4.html Cruz, P. R. (22 de Marzo de 2012). Recuperado el 24 de Mayo de 2014, de http://pattymackel.blogspot.mx/2012/03/historia-prolog.html Ferreira, A. (30 de Enero de 2012). Recuperado el 24 de Mayo de 2014, de http://www.paradigmas.mx/prolog-una-introduccion-a-la-programacion- logica/ Kathryn M. Jones Prez, G. A. (4 de Diciembre de 2007). Introduccin al Lenguaje de Programacin Lgica; Prolog. San Jos, Costa Rica. Prolog (Programacion Logica). (s.f.). Recuperado el 24 de mayo de 2014, de http://www.ecured.cu/index.php/Prolog_