Prolog (Lenguaje De Programación)
Prolog (o PROLOG), proveniente del francés PROgrammation en LOGique, es un lenguaje
de programación lógico e interpretado usado
habitualmente en el campo de la Inteligencia artificial.
Lenguaje de programación lógico e
interpretado (Prolog). La programación
lógica es un paradigma de los lenguajes de programación en
el cual los programas se consideran como una serie de
aserciones lógicas. De esta forma, el conocimiento se representa mediante
reglas, tratándose de sistemas declarativos
Antecedentes
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 estudiantes Alain Colmerauer y Philippe Roussel. Nació de un
proyecto que no tenía como objetivo la traducción de un lenguaje de
programación, sino la clasificación algorítmica 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 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 máquina abstracta denominada Warren Abstract 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 aparición de intérpretes del mismo para microordenadores de
8 bits (ej: micro-PROLOG) y para ordenadores domésticos de 16 bits
(ej: Turbo Prolog de Borland, entre otros muchos) a lo
largo de la década de 1980 contribuyó notablemente a su popularización.4 Otro importante factor en su difusión fue la
adopción del mismo para el desarrollo del proyecto de la quinta generación
de computadoras a principios de la década de los 80,5en cuyo contexto se desarrolló la
implementación paralelizada del lenguaje llamada KL1 y del
que deriva parte del desarrollo moderno de Prolog.
Las
primeras versiones del lenguaje diferían, en sus diferentes implementaciones,
en muchos aspectos de sus sintaxis, empleándose mayormente como forma normalizada
el dialecto propuesto por la Universidad de Edimburgo,6 hasta que en 1995 se estableció un estándar ISO
(ISO/IEC 13211-1), llamado ISO-Prolog.
Prolog
se enmarca en el paradigma de los lenguajes lógicos y declarativos,
lo que lo diferencia enormemente de otros lenguajes más populares tales
como Fortran, Pascal, C o Java.
Si bien en un principio se trataba de un lenguaje
de uso reducido, la aparición de intérpretes del mismo para microordenadores de
8 bits (ej: micro-PROLOG) y para ordenadores domésticos de 16 bits (ej: Turbo PROLOG
de Borland, entre otros muchos) a lo largo de la década de 1980 contribuyó
notablemente a su popularización.Otro importante factor en su difusión fue la adopción
del mismo para el desarrollo del proyecto de la quinta generación de
computadoras a principios de la década de los 1980, en cuyo contexto se
desarrolló la implementación paralelizada del lenguaje llamada KL1 y del que
deriva parte del desarrollo moderno de Prolog. Las primeras versiones del
lenguaje diferían, en sus diferentes implementaciones, en muchos aspectos de
sus sintaxis, empleándose mayormente como forma normalizada el dialecto
propuesto por la Universidad de Edimburgo , hasta que en 1995 se
estableció un estándar ISO (ISO/IEC 13211-1), llamado ISO-Prolog.
Entorno de desarrollo Prolog
Prolog es un lenguaje de programación
seminterpretado. Su funcionamiento es muy similar a Java. El código fuente se
compila a un código de byte el cuál se interpreta en una máquina virtual
denominada Warren Abstract Machine (comúnmente denominada WAM).
Por eso, un entorno de desarrollo Prolog se compone
de:
- Un compilador: Transforma el código fuente en código de byte. A diferencia de Java, no existe un Standard al respecto. Por eso, el código de byte generado por un entorno de desarrollo no tiene por que funcionar en el intérprete de otro entorno.
- Un intérprete: Ejecuta el código de byte. Un shell o top-level. Se trata de una utilidad que permite probar los programas, depurarlos, etc. Su funcionamiento es similar a los interfaces de línea de comando de los sistemas operativos.
- Una biblioteca de utilidades: Estas bibliotecas son, en general, muy amplias. Muchos entornos incluyen (afortunadamente) unas bibliotecas standard-ISO que permiten funcionalidades básicas como manipular cadenas, entrada/salida, etc.
Generalmente,
los entornos de desarrollo ofrecen extensiones al lenguaje como pueden ser la
programación con restricciones, concurrente, orientada a objetos, etc. Sería
injusto no mencionar aquí el entorno de desarrollo más popular: SICStus Prolog,
si bien, se trata de un entorno de desarrollo comercial (no gratuito).
SICStus,
CIAO Prolog, y posiblemente otros más, ofrecen entornos integrados generalmente
basados en Emacs que resultan muy fáciles de usar. CIAO Prolog además ofrece un
auto documentador similar al existente para Java además de un preprocesador de
programas. Prácticamente todos ellos son multiplataforma.
Aplicaciones Actuales Del Lenguaje PROLOG
- Prolog se puede utilizar para resolver, básicamente, cualquier tipo de problema.
- Principalmente es útil en la gestión de Juegos, en Inteligencia Artificial y Sistemas Expertos, como lenguaje especialmente pensado para construir bases de conocimientos basados en la lógica que forman parte importante de cualquier agente inteligente, en la construcción de Compiladores e Intérpretes, en el Reconocimiento del Lenguaje Natural, etc.
Ventajas y desventajas de la Programación Lógica
Ventajas
- La habilidad de PROLOG para calcular de forma procedural es una de las ventajas específicas 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 más fácil pensar las soluciones y muchos detalles procedurales son resueltos automáticamente 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 rápidamente, con pocos errores originando programas claramente legibles, aun si no se conoce muy bien el lenguaje.
- No hay que pensar demasiado en la solución del problema, ya que Prolog infiere sus respuestas basándose en las reglas declaradas dentro del programa. 4. Modularidad: cada predicado (procedimiento) puede ser ejecutado, validado y examinado independiente e individualmente. Prolog no tiene variables globales, ni asignación. Cada relación está auto contenida, lo que permite una mayor modularidad, portabilidad y reusabilidad de relaciones entre programas. 5. Polimorfismo: se trata de un lenguaje de programación sin tipos, lo que un alto nivel de abstracción e independencia de los datos (objetos).
- En Prolog, se puede representar incluso los mismos programas Prolog como estructuras.
- Prolog utiliza un mecanismo de búsqueda 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 mecanismo a la hora de depurar y optimizar los programas. 8. Manejo dinámico y automático de memoria.
- En prolog se utiliza notación prefija e infija mientras que en Lisp solo utiliza notación prefija.
Desventajas
- La resolución automática no siempre es eficiente, por lo que eventualmente se podría dar una respuesta incorrecta a una consulta. 2. Poco eficientes. 3. 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 suficiente información para contestar una consulta, es incapaz de reconocerlo y responde no. En esta situación sería más eficiente conocer que la respuesta no es negativa, sino que no es posible inferir un resultado.
- Los motores de inferencia poseen algunos límites.
No hay comentarios.:
Publicar un comentario