Conceptos Fundamentales
Enero-Junio 2014
Programacin Lgica y Funcional
Generalmente, el estilo orientado a objetos aparece en lenguajes de base imperativa, enriquecidos con las nociones de objeto, clase y herencia.
Programacin Lgica y Funcional MTI. Rosa Imelda Garca Chi
El estilo declarativo es muy diferente del imperativo, y bastante prximo al nivel de abstraccin de los lenguajes de especificacin.
Incluye los lenguajes de programacin funcional y los lenguajes de programacin lgica, objeto de este curso.
Funciones
El concepto de Funcin viene de las matemticas. Una funcin f es una transformacin que se puede aplicar a unos datos iniciales x1,,xn llamados argumentos o parmetros, y devuelve un dato final y=f(x1,,xn) llamado resultado
La mayora de los lenguajes de programacin disponen de funciones predefinidas para realizar diversas operaciones matemticas (aritmticas, trigonomtricas, etc.),
as como de recursos que permiten a los usuarios definir otras funciones para propsitos especficos.
Por ejemplo, la siguiente funcin escrita en Pascal calcula la suma de los cuadrados de los nmeros enteros positivos comprendidos entre 1 y n.
Naturalmente, las funciones utilizadas en programacin no siempre operan con objetos matemticos.
Por ejemplo, para su aplicacin de procesamiento de textos se podra disear una funcin de formateo. Sus parmetros seran un texto sin formatear junto con informacin acerca de cmo procesarlo, mientras que su resultado sera un texto formateado.
Las funciones definidas en un lenguaje imperativo pueden causar efectos colaterales. Por ejemplo, la siguiente funcin Pascal incrementa en 1 el valor de la variable global m cada vez que es ejecutada:
Por ejemplo, los dos fragmentos de cdigo Pascal que se muestran a continuacin parecen equivalentes a primera vista. Sin embargo, debido al efecto sobre m causado por la evaluacin de siguiente(x), el valor final de la variable y es 1 tras la ejecucin del primer fragmento de cdigo y 2 tras la ejecucin del segundo fragmento.
En Lenguajes Funcionales puros como Haskell, no existe la asignacin destructiva. Por este motivo, las variables se comportan como en matemticas. No cambian de valor, y el resultado de evaluar una expresin cualquiera siempre es el mismo, independientemente del orden de evaluacin.
Evaluacin perezosa
Polimorfismo:
Se pueden programar funciones que operan para datos de cualquier tipo.
Por ejemplo, la funcin que calcula la longitud de una lista no depende del tipo de los elementos.
Programacin Lgica y Funcional MTI. Rosa Imelda Garca Chi
Se permite que los parmetros y/o el resultado de una funcin f sea a su vez funciones.
Evaluacin perezosa:
Al calcular el valor de una expresin, se evitan automticamente todos los clculos innecesarios
Un sistema de recogida de basura (garbage collection) recupera automticamente la memoria asignada que deja de ser necesaria.
Brevedad y Claridad
Seguridad
Reusabilidad
Composicionalidad
Exotismo
Ineficiencia
Comportamiento complejo
Exotismo:
Ineficiencia:
Los programas funcionales no permiten controlar detalles de bajo nivel. En general, su ejecucin es ms lenta y consume ms memoria que en el caso imperativo
MTI. Rosa Imelda Garca Chi
Comportamiento complejo:
La evaluacin perezosa efecta los clculos en un orden difcil de predecir. Esto no dificulta la programacin en s misma, pero si dificulta el anlisis de la eficiencia de los programas. A veces es difcil estimar el tiempo y el espacio requeridos para el cmputo.
En particular, faltan herramientas que soporten la depuracin, la evaluacin del rendimiento y la transformacin de programas.
Programacin Lgica y Funcional MTI. Rosa Imelda Garca Chi
Aplicaciones de la programacin funcional Aunque la programacin funcional no es tan popular como otros estilos de programacin, la experiencia ha demostrado su utilidad para diversas aplicaciones.
El uso de lenguajes de la familia del LISP es tradicional en aplicaciones relacionadas con la inteligencia Artificial. Existen adems otras experiencias industriales de uso de lenguajes funcionales, tanto para el desarrollo rpido de prototipos como para el mantenimiento de aplicaciones estables.
Programacin Lgica y Funcional MTI. Rosa Imelda Garca Chi
Muchos lenguajes funcionales, en particular HASKELL, estn diseados para soportar tanto el clculo simblico como el numrico, y disponen de mecanismos para comunicarse con programas escritos en lenguajes imperativos tales como C y C++.
En http://www.haskell.org/practice.html se encuentra informacin sobre algunas aplicaciones informticas relevantes, desarrolladas con lenguajes funcionales.