domingo, 21 de noviembre de 2010

Lenguajes Lógicos

La programación lógica consiste en la aplicación del corpus de conocimiento sobre lógica para el diseño de lenguajes de programación; no debe confundirse con la disciplina de la lógica computacional.
La programación lógica es un tipo de paradigmas de programación dentro del paradigma de programación declarativa. El resto de los subparadigmas de programación dentro de la programación declarativa son: programación funcional, programación basada en restricciones, programas DSL (de dominio específico) e híbridos. La programación lógica gira en torno al concepto de predicado, o relación entre elementos. La programación funcional se basa en el concepto de función (que no es más que una evolución de los predicados), de corte más matemático.
Aplicaciones
La programación lógica encuentra su hábitat natural en aplicaciones de inteligencia artificial o relacionadas:
  • Sistemas expertos, donde un sistema de información imita las recomendaciones de un experto sobre algún dominio de conocimiento.
  • Demostración automática de teoremas, donde un programa genera nuevos teoremas sobre una teoría existente.
  • Reconocimiento de lenguaje natural, donde un programa es capaz de comprender (con limitaciones) la información contenida en una expresión lingüística humana.
  • Etc.
La programación lógica también se utiliza en aplicaciones más "mundanas" pero de manera muy limitada, ya que la programación tradicional es más adecuada a tareas de propósito general.
El lenguaje de programación lógica por excelencia es Prolog, que cuenta con diversas variantes.

PROLOG
PROLOG es un lenguaje de programación simple pero poderoso desarrollado en la Universidad de Marsella como una herramienta práctica para programación lógica. Desde el punto de vista del usario, la ventaja principal es la facilidad para programar, ya que se pueden escribir rapidamente y con pocos errores, programas claramente legibles.
PROLOG está orientado a la resolución de problemas mediante el cálculo de predicados, basado en:
  • Preguntas a la base de datos.
  • Pruebas matemáticas.
  • El programa PROLOG especifíca cómo debe ser la solución, en vez de dar el algoritmo para su resolución. 
  • La solución se obtiene mediante búsqueda aplicando la lógica de predicados.

Perspectiva del lenguaje
  • El programa prolog se compone de unos hechos (datos) y un conjunto de reglas, es decir, relaciones entre objetos de la base de datos.
  • La ejecución del programa cargado en memoria consiste en realizar una pregunta de forma interactiva: el interprete generará por inferencia los resultados que se deducen a partir del contenido de la base de datos.
  • PROLOG tiene una sintaxis y semántica simples. Sólo busca relaciones entre los objetos creados, las variables y las listas, que son sus estructuras básicas.
  • Comentarios entre /* */
Representación de almacenamiento
  • Las reglas y hechos son almacenadas en memoria como listas enlazadas.
  • La ejecución de prolog consiste en una búsqueda en profundidad de un árbol conteniendo todas las posibles soluciones. Para cada una de ellas se evaluará su corrección. La búsqueda se puede hacer más eficiente mediante la poda del árbol de búsqueda (corte).
Control de secuencia

El orden de evaluación es secuencial.
  • Expresiones, operaciones aritméticas y operadores relacionales. Not().
  • Enunciados
    • Hechos, relaciones que se expresan en una consulta. Son tuplas con un nombre de predicado y unos argumentos.
    • Reglas, implicaiones que se expresan en una operación consult.
    • Preguntas, sucesión de términos que finalizan con un punto.
    • Cortes, (!), fuerza el retroceso en la búsqueda. Esto puede impedir que se encuentren ciertas soluciones, pero puede hacer más eficiente la búsqueda.
  • Entrada y salida, nl y write.
Evaluación del lenguaje
  • PROLOG va bien para problemas de relaciones, p.e. Tratamiento del lenguaje natural, y consulta de bases de datos.
  • A pesar de que es posible desarrollar programas sin especificar el algoritmo de resolución a veces hay que echar mano de otro tipo de programación para hacer los programas más eficientes, y a menudo se emplea el corte para limitar el espacio de búsqueda.

Bibliografia

http://www.desarrolloweb.com/articulos/1573.php
http://es.wikipedia.org/wiki/Programaci%C3%B3n_l%C3%B3gica

1 comentario: