Documentos de Académico
Documentos de Profesional
Documentos de Cultura
DEFINICION
o Paradigma de programación basado en la lógica de primer orden. La programación
lógica estudia el uso de la lógica para el planteamiento de problemas y el control
sobre las reglas de inferencia para alcanzar la solución automática.
o La programación lógica, junto con la funcional, forma parte de lo que se conoce
como Programación Declarativa, es decir la programación consiste en indicar
como resolver un problema mediante sentencias, en la Programación Lógica, se
trabaja en una forma descriptiva, estableciendo relaciones entre entidades,
indicando no como, sino que hacer, entonces se dice que la idea esencial de la
programación lógica es
1. ?- son_del_mismo_continente("Manolo", "Marco").
2. Yes
o También podemos establecer objetivos abiertos y el sistema nos dirá qué valores
hacen que se cumplan:
1. ?- es_europeo(A).
2. A = Manolo
3. A = Marco
Como funciona
o Generalmente se usa un mecanismo que se llama resolución SLD (algo así como
resolución por selección lineal de cláusulas definidas) que se encarga de obtener
todas las posibles formas de satisfacer el objetivo planteado. Explicar esto en
profundidad lleva su tiempo, pero vamos a ver si nos podemos hacer una idea de
cómo funciona:
o Se parte del objetivo que queremos resolver y se van seleccionando reglas hasta
intentar encontrar una solución. Esta selección de reglas se realiza de arriba a
abajo, es decir, en el orden que están definidas, y una vez que se elige una regla,
se resuelven recursivamente sus cláusulas de izquierda a derecha. Cuando hemos
terminado, ya sea porque hemos encontrado una solución o porque hemos
descubierto que no hay solución posible (no hay más reglas que aplicar), se realiza
un backtracking y se toma la siguiente regla hasta procesar exhaustivamente
todas las reglas definidas.
o En realidad, el proceso es un poco más complicado que eso, pero para hacernos
una idea de cómo funciona, nos sirve.
o Vamos a verlo con un ejemplo sobre el programa anterior:
1. son_del_mismo_continente ("Manolo", A).
o Estamos preguntando al sistema qué valores de A cumplen que son del mismo
continente que «Manolo». Para resolverlo, empezaríamos por tomar la primera
regla que tenemos para son_del_mismo_continente y la aplicaríamos,
convirtiendo nuestro objetivo en:
1. es_europeo("Manolo"), es_europeo(B).
o Ahora procesaríamos cada objetivo de izquierda a derecha. Aplicando la regla
es_europeo(A) :- es_español(A), nos quedaría:
1. es_español("Manolo"), es_europeo(B).
o Que Manolo es español lo sabemos porque está definido directamente
(es_español("Manolo")), así que pasaríamos a resolver la segunda cláusula:
1. es_europeo(B).
o Ahora habría que encontrar todos aquellos valores de B para los que se cumple
que B es europeo, y así alcanzaríamos la solución. Como eso es un poco largo, os
dejo un video en el que alguien se entretiene haciendo una resolución SLD en
Prolog.
VENTAJAS Y DESVENTAJAS
o VENTAJAS
Descripciones independientes de la implementación (unificación
semántica).
Puede mejorarse la eficiencia modificando el componente de control sin
tener que modificar la lógica del algoritmo.
Base de conocimiento fácilmente escalable.
Relaciones multipropósito.
Expresión simple y precisa de los problemas.
Generación rápida de prototipos e ideas complejas.
Sencillez en la implementación de estructuras complejas.
Potencia.
o DESVENTAJAS
Dependiendo del problema a solucionar, la implementación y el motor de
inferencia, puede llegar a ser extremadamente ineficiente.
Pocas y muy específicas áreas de aplicación.
Existen muy pocas herramientas de depuración, en su mayoría poco
efectivas.
En problemas reales, es poco utilizado.
Si el programa no contiene suficiente información para responder una
consulta la respuesta puede ser una que se preste para malentendidos.
Inferencia limitada por su base de conocimiento.
LENGUAJES
o PROLOG
o MERCURY
o LOGTALK
o CURRY
o DATALOG (LOGIC PROGRAMMING IN PYTHON)
REGLAS
o CLAUSULAS DE HORN
Secuencia de literales que contiene a lo sumo uno de sus literales
positivos (disyunción de literales). Esto es un ejemplo de una cláusula de
Horn, y abajo se indica una fórmula como esta también puede reescribirse
de forma equivalente como una implicación:
Cláusula ‘definite’: Cláusula de Horn con exactamente un literal positivo.
Hecho: Cláusula ‘definite’ sin literales negativos.
Cláusula objetivo: Sin ningún literal positivo (consulta).
C1, C2, ⋯, Cl
En SLD, todas las cláusulas son una secuencia cláusulas objetivo y el otro
padre es una cláusula de entrada. En la resolución SL, el otro padre es una
cláusula de entrada o una cláusula ancestral anterior en la secuencia.