You are on page 1of 50

PLYF UNIDAD 1.

Conceptos Fundamentales
Enero-Junio 2014
Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

PROGRAMACIN LGICA FUNCIONAL

1.1. ESTILOS DE PROGRAMACIN

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

1.1. Estilos de Programacin

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

Variedad de estilos de programacin


Los muchos lenguajes de programacin existentes se pueden clasificar segn el estilo de programacin que soportan.
Los principales estilos (tambin llamados paradigmas) de programacin son el imperativo, el declarativo y el orientado a objetos.

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.

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

Lenguajes de Programacin Imperativos


Pascal, Ada, C, C++, Java y muchos otros lenguajes de programacin son imperativos. Un programa consiste en una secuencia de rdenes que se ejecutan una tras otra, modificando los valores de variables por medio de asignaciones. Por ejemplo, la asignacin x:=x+1, incrementa en 1 el valor de la variable entera x.
Programacin Lgica y Funcional MTI. Rosa Imelda Garca Chi

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

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

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.

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

Por ejemplo, la siguiente funcin escrita en Pascal calcula la suma de los cuadrados de los nmeros enteros positivos comprendidos entre 1 y n.

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

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.

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

Lenguajes de Programacin Funcionales


Los programas imperativos contienen asignaciones y otras construcciones que controlan el orden de ejecucin, tales como bucles y llamadas a procedimientos.

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

Lenguajes de Programacin Funcionales


En un lenguajes funcional, un programa contiene nicamente definiciones de funciones. Concretamente, en el lenguaje funcional Haskell las funciones se definen por medio de ecuaciones, declarando los tipos de parmetros y de su resultado.

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

Lenguajes de Programacin Funcionales


Por ejemplo, las siguientes funciones sirven para calcular el cuadrado de un nmero entero y el mximo entre dos nmeros enteros respectivamente. Obsrvese que cada una de las dos ecuaciones de max tiene asocia una condicin:

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

Caractersticas de los Lenguajes Funcionales

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:

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

Los efectos colaterales hacen ms impredecibles el comportamiento de los programas.

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.

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

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.

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

Otras caractersticas importantes de los lenguajes funcionales puros son:


Nivel de abstraccin alto Disciplina esttica de tipos Polimorfismo

Gestin automtica de la memoria

Evaluacin perezosa

Funciones de orden superior

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

Nivel de abstraccin alto:


Los programas estn prximos a la lgica de los problemas a resolver, ignorando los detalles de bajo nivel.

Las ecuaciones de un programa sirven para calcular y tambin para razonar.

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

Disciplina esttica de tipos:

Los errores debidos a tipos incorrectos se detectan antes de la ejecucin.

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

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

Funciones de orden superior:

Se permite que los parmetros y/o el resultado de una funcin f sea a su vez funciones.

En este caso, se dice que f es una funcin de orden superior.

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

Evaluacin perezosa:

Al calcular el valor de una expresin, se evitan automticamente todos los clculos innecesarios

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

Gestin automtica de la memoria:

La memoria que se va necesitando para el cmputo es asignada automticamente en tiempo de ejecucin.

Un sistema de recogida de basura (garbage collection) recupera automticamente la memoria asignada que deja de ser necesaria.

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

Ventajas de la programacin funcional


Algunas ventajas importantes de la programacin funcional son:

Brevedad y Claridad

Seguridad

Reusabilidad

Composicionalidad

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

Inconvenientes de la programacin funcional

La programacin funcional tambin tiene inconvenientes, algunos de ellos son:

Exotismo

Ineficiencia

Comportamiento complejo

Falta de apoyo a los usuarios

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

Exotismo:

El estilo funcional es menos conocido que el imperativo.

Hace falta un esfuerzo para adaptarse a una nueva manera de pensar

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

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

Programacin Lgica y Funcional

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.

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

Falta de apoyo a los usuarios:


Las implementaciones existentes de lenguajes funcionales en general carecen de un entorno de programacin que facilite el desarrollo y mantenimiento de programas.

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

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.

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

Aplicaciones de la programacin funcional

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

Aplicaciones de la programacin funcional

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++.

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

En http://www.haskell.org/practice.html se encuentra informacin sobre algunas aplicaciones informticas relevantes, desarrolladas con lenguajes funcionales.

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

Familias de Lenguajes Funcionales

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

Familias de Lenguajes Funcionales

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

Por su atencin gracias!

Programacin Lgica y Funcional

MTI. Rosa Imelda Garca Chi

You might also like