PROLOG




Historia:

Prolog fue desarrollado por Alain Colmerauer y Philippe Roussel, en Francia, como una herramienta de programación lógica. 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. Se trataba de un lenguaje totalmente interpretado hasta que David H.D. Warren, desarrollo un compilador capaz de traducir prolog en un conjunto de instrucciones en una maquina abstracta denominada Warren Abstract Machine (WAM). Desde entonces Prolog es un lenguaje semi-interpretado.

En 1995 se establecio un estándar del lenguaje llamado ISO-PROLOG.


Entornos de desarrollo:

Es un lenguaje semi-interpretado. Su funcionamiento es similar a java. El código fuente se complia a un código de byte el cual se interpreta en una maquina virtual denominada Warren Abstract Machine.

El entorno de desarrollo se compone por:


  • Un compilador: transforma el código fuente en código de byte.
  • Un interprete: ejecuta el código de byte.
  • Una biblioteca de entidades: estas bibliotecas son muy amplias. Muchos entornos incluyen unas bibliotecas standart-iso que permiten funcionalidades básicas como manipular cadenas, entrada/salida, etc.


SICStus, SWI-Prolog, CIAO Prolog, y posiblemente otros más, ofrecen entornos integrados generalmente basados en Emacs que resultan muy fáciles de usar. Prácticamente todos ellos son multiplataforma.


Elementos en prolog:

Necesitamos una serie de elementos para el desarrollo en prolog:

  • Átomos: Es una definición genérica de un objeto del mundo que queremos representar.
  • Predicados: Nos permite especificar características de los objetos de nuestro mundo o las relaciones entre ellos.
  • Los nombres de objetos y relaciones deben comenzar con una letra minúscula.
  • Primero se escribe la relación, y luego los objetos separados por comas y encerrados entre paréntesis.
  • Al final de un hecho debe ir un punto (".").

Hechos:


Es algo que esta ocurriendo en el mundo, características o relaciones entre objetos. Suponiendo que se quiera expresar el hecho de que "un coche tiene ruedas". Este hecho, consta de dos objetos, "coche" y "ruedas", y de una relación llamada "tiene". La forma de representarlo en PROLOG es: tiene(coche,ruedas).

Los nombres de objetos y relaciones deben comenzar con una letra minúscula.Primero se escribe la relación y luego los objetos separados por comas y encerrados entre paréntesis.


Variables:

En prolog una variable representa el valor de un átomo. Representa objetos que el mismo prolog determina. Una variable puede estar o no instanciada. Estar instanciada cuando existe un objeto determinado representado por la variable. Los nombres de variables comienzan siempre por una letra mayúscula.Un caso particular es la variable anónima, representada por el carácter subrayado ("_"). Es una especie de comodín que utilizaremos en aquellos lugares que debería aparecer una variable.

Reglas:

Las reglas se utilizan en PROLOG para significar que un hecho depende de uno o mas hechos. Son la representación de las implicaciones lógicas del tipo p ---> 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 ó mas hechos (conjunción de hechos), separados por una coma (","), que actúa como el "y" lógico.
  • Las reglas finalizan con un punto (".").






Programando en Prolog:

Se tiene que tener dos cosas en cuenta: la especificación de los hechos y las preguntas sobre esos objetos o relaciones.



Prolog saca la respuesta explorando cada uno de los hechos introducidos en la base de datos hasta encontrar uno que coincida, que será el caso en la que la respuesta será afirmativa o negativa. Se usan operadores lógicos como AND, OR y NOT; Prolog busca satisfacer la primera parte de la pregunta, y si lo es busca en la segunda.


Objetos de datos:

Tipos de datos primitivos y constantes: Enteros, reales, caracteres.

Los identificadores con minúscula representan hechos, los que van con mayúscula variables.
  • Átomos: constantes y variables de cadena.
  • Listas, representadas entre [ ].
  • Tipos definidos por el usuario. Las reglas para definir relaciones pueden actuar como tipos de usuario.




Ventajas y desventajas de la programación lógica

Ventajas:


  • Habilidad para calcular de forma procedural. Las ventajas de la forma declarativa 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.
  • Facilidad para programar ya que se pueden escribir programas rápidamente con pocos errores originando programas claramente legibles, aun si no se conoce bien el lemguaje.
  • 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
  • Prolog utiliza un mecanismo de búsqueda independiente de la base de hechos. Es una buena estrategia puesto que garantiza el proceso de todas las posibilidades.

Desventajas:


  • La resolución automática podría dar una respuesta incorrecta a una consulta. Son poco eficientes.
  • Prolog algunas veces es incapaz de reconocer que un problema es inaplicable o insuficiente. Si el programa no contiene suficiente información para contestar una consulta, es incapaz de reconocerlo y responde no.
  • Los motores de inferencia poseen algunos límites.



Tipos de problema que soluciona prolog:


La evolución histórica de los sistemas expertos también se ha producido a medida que se ha ido desarrollando la inteligencia artificial y los diferentes métodos que han ido empleando para su resolución. El desarrollo de lenguajes como LISP y PROLOG condicionaron esa evolución.

La resolución de juegos y la planificación así como la construcción de agentes inteligentes constituyen amplios campos que abarca la rama de la inteligencia artificial. 



Algunos juegos y programas bastantes populares que se han programado en prolog son:


problema de las 8 reinas

analogía: para resolver cuestiones de analogía  geométrica en tests de inteligencia

sistemas expertos: pueden percibir el ambiente mediante sensores y actúan sobre ese ambiente por medio de efectores.
Compiladores: la construcción de compiladores e interpretes son campos de desarrollo muy adecuados para prolog.
Torres de hanoi

¿Por qué SWI-Prolog?

Próximamente estaremos usando el SWI-Prolog como proyecto de una materia con la finalidad de la acreditación parcial de la materia. El nombre SWI proviene de Sociaal-Wetenschappelijke Informatica ("Informática de Ciencias Sociales").
SWI-Prolog es una implementación open source (código abierto) del lenguaje de programación Prolog. Su autor principal es Jan Wielemaker.
Optamos por la utilización de este recurso debido gran cantidad de bibliotecas, herramientas y, por supuesto, una documentación muy completa y extensiva. Ofrece un servicio muy simple de implementar y a su vez muy potente y eficaz. Es gratuito y puede correr plataformas Windows, Linux y Macintosh.

Igualmente dejo una lista de otras posibilidades para la utilización de prolog:





Fuentes: