domingo, 21 de noviembre de 2010

Lenguajes Funcionales.

Materia: Lenguajes de programación web.

Introduccion:

En ciencias de la computación, la programación funcional es un paradigma de programación declarativa basado en la utilización de funciones aritméticas que no maneja datos mutables o de estado. Enfatiza la aplicación de funciones, en contraste con el estilo de programación imperativa, que enfatiza los cambios de estado. La programación funcional tiene sus raices en el *cálculo lambda, un sistema formal desarrollado en los 1930s para investigar la definición de función, la aplicación de las funciones y la recursión. Muchos lenguajes de programación funcionales pueden ser vistos como elaboraciones del cálculo lambda.

En la práctica, la diferencia entre una función matemática y la noción de una "función" utilizada en la programación imperativa es que las funciones imperativas pueden tener efectos secundarios, al cambiar el valor de calculos realizados previamente. Por esta razón carecen de transparencia referencial, es decir, la misma expresión lingüística puede resultar en valores diferentes en diferentes momentos dependiendo del estado del programa siendo ejecutado. Con código funcional, en contraste, el valor generado por una función depende exclusivamente de los argumentos alimentados a la función. Al eliminar los efectos secundarios se puede entender y predecir el comportamiento de un programa mucho más fácilmente, y esta es una de las principales motivaciones para utilizar la programación funcional.

Los lenguajes de programación funcional, especialmente los que son puramente funcionales, han sido enfatizados en el ambiente académico principalmente y no tanto en el desarrollo de software comercial. Sin embargo, lenguajes de programación importantes tales como Scheme, Erlang, Objective Caml y Haskel, han sido utilizados en aplicaciones comerciales e industriales por muchas organizaciones. La programación funcional también es utilizada en la industria a través de lenguajes de dominio específico como R (estadística), Mathematica (matemáticas simbólicas), J y K (análisis financiero), F# en Microsoft.NET y XSLT (XML). Lenguajes de uso específico usados comúnmente como SQL y Lex/Yacc, utilizan algunos elementos de programación funcional, especialmente al procesar valores mutables. Las hojas de cálculo también pueden ser consideradas lenguajes de programación funcional.

La programación funcional también puede ser desarrollada en lenguajes que no están diseñados específicamente para la programación funcional. En el caso de Perl, por ejemplo, que es un lenguaje de programación imperativo, existe un libro que describe como aplicar conceptos de programación funcional. JavaScript, uno de los lenguajes más ampliamente utilizados en la actualidad, también incorpora capacidades de programación funcional.

Para que nos sirve?

El objetivo es conseguir lenguajes expresivos y matemáticamente elegantes, en los que no sea necesario bajar al nivel de la máquina para describir el proceso llevado a cabo por el programa, y evitar el concepto de estado del cómputo. La secuencia de computaciones llevadas a cabo por el programa se rige única y exclusivamente por la reescritura de definiciones más amplias a otras cada vez más concretas y definidas, usando lo que se denominan "definiciones dirigidas".

Ventajas de uso.

Entre las ventajas que suelen citarse de usar un paradigma funcional en la programación de computadoras, están las siguientes:
• Ausencia de efectos colaterales

• Proceso de depuración menos problemático

• Pruebas de unidades más confiables

• Mayor facilidad para la ejecución concurrente

Los programas escritos en un lenguaje funcional están constituidos únicamente por definiciones de funciones, entendiendo éstas no como subprogramas clásicos de un lenguaje imperativo, sino como funciones puramente matemáticas, en las que se verifican ciertas propiedades como la transparencia referencial (el significado de una expresión depende únicamente del significado de sus subexpresiones), y por tanto, la carencia total de efectos laterales.

Otras características propias de estos lenguajes son la no existencia de asignaciones de variables y la falta de construcciones estructuradas como la secuencia o la iteración (lo que obliga en la práctica a que todas las repeticiones de instrucciones se lleven a cabo por medio de funciones recursivas).

Existen dos grandes categorías de lenguajes funcionales: los funcionales puros y los híbridos. La diferencia entre ambos estriba en que los lenguajes funcionales híbridos son menos dogmáticos que los puros, al admitir conceptos tomados de los lenguajes imperativos, como las secuencias de instrucciones o la asignación de variables. En contraste, los lenguajes funcionales puros tienen una mayor potencia expresiva, conservando a la vez su transparencia referencial, algo que no se cumple siempre con un lenguaje funcional híbrido.
Paradigma:

El paradigma de programación funcional comparte, junto con el de programación lógica, características de programación declarativa.

La característica fundamental del paradigma declarativo es que no existe la asignación ni el cambio de estado en un programa. Las variables son identificadores de valores que no cambian en toda la evaluación (como constantes definidas con un DEFINE de C). Sólo existen valores y expresiones matemáticas que devuelven nuevos valores a partir de los declarados.

En los lenguajes imperativos, sin embargo, se realizan asignaciones que cambian el valor de una variable ya existente.

Consideremos el siguiente ejemplo:
• 1. { int x = 1;
• 2. x = x+1;
• 3. int y = x+1;
• 4. { int x = y;
• 5. y = x+2; }
• 6. y = x;}

En este fragmento de programa se mezclan instrucciones imperativas con instrucciones declarativas. Por ejemplo, las instrucciones 1, 3 y 4 son declarativas, ya que están definiendo una variable con un valor asociado (están dando un nombre a un valor). Sin embargo, las sentencias 2, 5 y 6 son imperativas, ya que están modificando el valor de una variable mediante asignaciones de nuevos valores.

Los Lenguajes Funcionales son:

Lenguajes Puros:
• Haskell
• Miranda

Lenguajes híbridos:
• Scala
• Lisp
• Scheme
• Ocmal
• SAP
• Standard ML
Otros:
• Erlang
• R
• Python
• Perl
• Ruby

Notas: *

El cálculo lambda es un sistema formal diseñado para investigar la definición de función, la noción de aplicación de funciones y la recursión. Fue introducido por Alonzo Church y Stephen Kleene en la década de 1930
Ejemplo de un programa funcional:

Es un programa sencillo hecho en el lenguaje Lisp donde realiza el factorial de un número.




Bibliografias:

http://es.wikipedia.org/wiki/Programaci%C3%B3n_funcional

http://www.dccia.ua.es/dccia/inf/asignaturas/LPP/2007-2008/tema-02.html

1 comentario: