domingo, 7 de noviembre de 2010

Lenguajes Lógicos Prolog

Materia: Lenguajes de Programación

Alain Coulmerauer y Philippe Roussel iniciaron en 1970 el desarrollo de Prolog quienes tuvieron como finalidad desarrollar un lenguaje en el que se pudieran hacer deducciones a partir de texto. Prolog viene de "PROgramming LOGic"(programación lógica), fue desarrollado en Francia en 1972.
En 1972 se llevo acabo la primera implementación de Prolog usando el compilador ALGOL W de Wirth concluyendo las características básicas del lenguaje actual en 1973. El uso de este lenguaje creció muy rápido entre quienes se dedicaban a la programación lógica, se daba a conocer principalmente por experiencias personales de quienes lo usaban y no por la comercialización de producto.
El uso de este lenguaje se extendió hasta los años 80's, pero la falta de aplicaciones eficaces de Prolog han impedido su crecimiento.

Prolog es el lenguaje más popular en la categoría de programación lógica, Prolog no es un lenguaje como los que hemos visto anteriormente para usos generales, más bien esta orientado a llegar a la solución del problema a través del cálculo de predicados.

Sus aplicaciones vienen de dos distintos caminos:
  • Preguntas a bases de datos: Las bases de datos nos dan relaciones entre los elementos que están guardando en las bases de datos, sin embargo no todas las relaciones se pueden indicar, podemos usar Prolog para obtener las relaciones que no están indicadas explícitamente, pero si se dan los datos necesarios para obtener las relaciones implícitas.
  • Pruebas matemáticas: Es posible también dar las especificaciones para pruebas matemáticas con una serie de reglas y poder así hacer un modelo para generar pruebas de teoremas.

Para Prolog se tienen que especificar datos y dejar que la computadora dedujera la secuencia de ejecución para esa solución, a diferencia de los demás lenguajes en los que especificamos el algoritmo que soluciona el problema.

Por ejemplo se tiene la siguiente información de una línea aérea:

vuelo(numero_de_vuelo, ciudad_origen, ciudad_destino, hora_salida, hora_llegada)

los vuelos de Monterrey a Guadalajara se pueden especificar como:

vuelo(numero_de_vuelo, Monterrey, Guadalajara, hora_salida, hora_llegada)

Aquí un ejemplo más completo tomando el anterior pero ahora se quiere obtener una parada intermedia entre dos vuelos se tiene la ciudad de origen del primero vuelo y la cuidad de destino del segundo vuelo, entonces no se especifica el algoritmo pero si se dicen las condiciones que debe cumplir la solución:

vuelo(vuelo1, Monterrey, X, salida1, llegada1),
vuelo(vuelo2, X, Guadalajara, salida2, llegada2),
sale2>=llegada1+30

La X indica esa ciudad intermedia que se esta buscando y que debe de cumplir con el requisito de tener un vuelo que provenga de Monterrey y un vuelo que vaya para Jalisco además de que la hora de salida del segundo vuelo sea mayor o igual a la hora de llegada del primer vuelo más 30 minutos.
Estos datos son más que suficientes para que Prolog pueda encontrar la solución al problema.

Los programas en Prolog se componen por una serie de hechos relacionados y un conjunto de reglas. Prolog solicita entradas al usuario, el usuario debe introducir una pregunta y los hechos y reglas que mencioné anteriormente son utilizados para determinar cuales preguntas son ciertas de acuerdo a la base de datos.

Cuando el usuario escribe alguna pregunta o el nombre de una función se regresa "yes" o "no" dependiendo de la verdad o falsedad de la pregunta, se introduce ";" para obtener el siguiente conjunto de valores que corresponden con la pregunta hasta que ya no hay mas valores que satisfacen la pregunta y se imprime "no" y se espera a la nueva pregunta, el cambio de renglón indica que ya no se quieren ver más resultados. Prolog tiene una sintaxis y semántica muy simples ya que busca relaciones entre una serie de objetos, la variable y la lista son estructuras de datos de Prolog.
Los comentarios en Prolog se hacen con /*...*/ igual que en C.

Aunque Prolog ha obtenido gran éxito al resolver problemas que relacionan bases de datos y algunos otros campos, la función original con la que fue creada de obtener soluciones sin especificar detalles algoritmos no se alcanzo realmente.


Referencias:
Pratt, T.W., & Zelkowitz, M.W. (1998). Lenguajes de programación. Pearson, Prentice Hall.

1 comentario: