Contenido
PalancaProgramación lógica
La programación lógica es la declaración de una serie de hechos y reglas de deducción. La ejecución de un programa consiste en demostrar un teorema. El programa responde si el teorema se puede probar o no a partir de los enunciados hechos de antemano.
La programación lógica es diferente a la programación procedimental (C, JAVA, etc.), los cálculos se realizan en forma de pruebas lógicas. Hablamos de programación declarativa: el programa describe una situación correspondiente a un problema a resolver. La programación declarativa no es incompatible con la estructuración de objetos.
Las fórmulas expresadas en Prolog están restringidas a cláusulas de Horn y lógica de primer orden. Una cláusula de Horn es una cláusula con como máximo un literal positivo. Estos no serán explicados sino implícitos en las explicaciones del lenguaje Prolog.
Reglas, hechos y metas
qqbe x, y, z, ¬hijo (x, y) ∨ ¬hijo (y, z) ∨ nieto_hijo (x, z) que es igual
hijo (x, y) ∧ hijo (y, z) ⇒ nieto_hijo (x, z)
está escrito en Prolog: nieto_de (X, Z): - hijo_de (X, Y), hijo_de (Y, Z)
Por lo tanto, un programa es un conjunto de hechos y reglas, todo en forma de cláusulas Horn. El intérprete de Prolog utiliza esta base de conocimientos para alcanzar sus objetivos.
Sintaxis del prólogo
La sintaxis consta de:
- Constantes : números enteros o de coma flotante, valores booleanos, identificadores y cadenas.
- Variables : identificado por cadenas de caracteres que comienzan con una letra mayúscula o un guión bajo (si no se especifica, es decir, sin interés para el usuario). Variable es en el sentido matemático, siempre representa el mismo objeto y no cambia de valor en la misma rama de prueba.
- Predicado : identificado por cadenas de caracteres que comienzan con una letra minúscula. Un predicado tiene aridad (el número de argumentos que requiere). Los parámetros están separados por una coma, equivalente a AND; el OR es un punto y coma.
Reglas y hechos:
- un hecho es un predicado con constantes como parámetros: padre ('Bernard', 'Bernardo')
- una regla consta de una cabeza (literal positivo) y una cola (conjunción de literales negativos que terminan con un punto: sobrino (X, Y): - hijo (X, Z), hermano_o_hermana (Y, Z).
Escribe un programa de Prolog
Un programa es una lista de hechos y reglas. Agrupamos las reglas que tienen el mismo predicado principal y los hechos que se relacionan con el mismo predicado. El orden en el que se declaran las reglas puede tener un impacto en los goles.
hijo_de ('roger', 'gertrude'). hijo_de ('gertrude', 'germaine'). hijo_de ('marcel', 'robert'). hermano_o_hermana ('gertrude', 'robert'). sobrino (X, Y): - hijo (X, Z), hermano_o_hermana (Y, Z). nieto_de (X, Y): - hijo_de (X, Z), hijo_de (Z, Y).
Una constante ('roger') cubre todo el programa mientras que una variable solo existe en la cláusula donde se encuentra. Entonces, la variable X de sobrino (X, Y) no es la misma que la de nieto_hijo_ de (X, Y). Por otro lado, es lo mismo que en la conjunción que se le asocia.
Una vez cargados los programas y, por tanto, constituida la base de hechos y reglas, es posible hacer preguntas. A esto se le llama demostración o resolución de preguntas. Surge una pregunta al reemplazar una regla o al hacer una constante o variable por un '?'. Para conocer todas las reglas de un tipo, escriba el nombre de la regla que contiene las variables seguido de un '?' : humano (H)? Se utiliza para conocer a todos los humanos de la base.