Introducción:
Antes de adentrar en el tema de la programación lógica primero debemos iniciar por recordar que tipo de programación es y dar una pequeña introducción al tema.
Programación declarativa:
Paradigma de programación que está basado en el desarrollo de programas especificando o declarando un conjunto de condiciones, proposiciones, afirmaciones, restricciones, ecuaciones o transformaciones que describen el problema y detallan solución.
Como explicamos en la entrada anterior, la programación declarativa parte de la unión de dos paradigmas, el paradigma lógico y el funcional. Ahora nos centraremos en el paradigma lógico y en su lenguaje más representativo, Prolog.
Paradigma Lógico:
Existen diversas definiciones para explicar lo que es, pero para dar una idea a modo introductorio la forma más sencilla de resumirlo podría ser: “El paradigma lógico tiene como característica principal la aplicación de las reglas de la lógica para inferir conclusiones a partir de datos”.
¿Cómo se construye un programa lógico?
Se construye especificando la información del problema real en una base de conocimiento en un lenguaje formal. Su forma de proporcionar respuestas no consiste en que la base de datos tenga todos los datos, sino que contenga la información necesaria para poder resolver el problema mediante un mecanismo de inferencia que actúa sobre ella.
Características Principales:
Lógica proposicional:
Este paradigma basa sus fundamentos en las teorías de la lógica proposicional, especialmente un tipo particular de lógica conocido como “lógica de predicados de primer orden”, o más particular aún, las Clausulas de Horn (una conclusión es cierta si lo es simultáneamente todas sus premisas).
Características/Restricciones de la LPO (Lógica de primer orden):
- Todo nombre debe referir a un objeto
- Ningún nombre puede referir a más de un objeto
- Un objeto puede tener más de un nombre.
Declaraciones:
No posee un algoritmo que detalle los pasos a seguir, el programa es un conjunto de declaraciones formales que describen la solución, estas deben ser correctas por definición. Aquí no existe el concepto de celdas de memoria, sino que las variables son unificadas, cuyos valores temporales se van sustituyendo durante la ejecución del programa.
Backtracking:
Es un mecanismo interno que actúa como control de secuencia. Durante la ejecución, va evaluando y combinando las reglas lógicas de la base de conocimiento para lograr los resultados esperados.
Inversibilidad:
La programación lógica está basada en la noción de que el programa implementa una relación, en vez de una transformación. Los predicados son relaciones, que al no tener predefinido una “dirección” entre sus componentes, permiten que sus argumentos actúen indistintamente como argumentos de entrada y salida. Esta característica se denomina como reversibilidad o inversibilidad. Dado que las relaciones son más generales que las transformaciones, la programación lógica es potencialmente de más alto nivel que la de otros paradigmas.