PROGRAMACIÓN FUNCIONAL

Concepto:
En ciencias de la computación, la programación funcional es un paradigma de programación declarativa basado en el uso de funciones matemáticas, en contraste con la programación imperativa, que enfatiza los cambios de estado mediante la mutación de variables. La programación funcional tiene sus raíces en el cálculo lambda, un sistema formal desarrollado en los años 1930 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, como cambiar el valor de cálculos realizados previamente. Por esta razón carecen de transparencia referencia, es decir, la misma expresión sintáctica puede resultar en valores diferentes en varios momentos de la ejecución del programa. 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. Ésta es una de las principales motivaciones para utilizar la programación funcional.
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 re escritura de definiciones más amplias a otras cada vez más concretas y definidas, usando lo que se denominan "definiciones dirigidas".

Características:

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 referencia (el significado de una expresión depende únicamente del significado de sus subexpresiones), y por tanto, la carencia total de efectos colaterales.

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 interacción (lo que obliga en la práctica a que todas las repeticiones de instrucciones se lleven a cabo por medio de funciones re cursivas).

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 referencias, algo que no se cumple siempre con un lenguaje funcional híbrido.

       Lenguaje:

     Lisp: 
  • Lisp es un lenguaje tipo funcional, es el segundo lenguaje de alto nivel más viejo, los dialectos de Lisp más ampliamente conocidos son el Scheme y Common Lisp.
    El nombre Lisp viene de "LISt Processing" (Proceso de LIStas). Una de las estructuras de datos importante de Lisp son las listas encadenadas, el código fuente de lisp esta compuesto de listas.
    Es un lenguaje útil para desarrollar la inteligencia artificial.
  • Camel:
CAMEL es un estilo de escritura que se aplica a frases o palabras compuestas. El nombre se debe a que las mayúsculas a lo largo de una palabra en Camel se asemejan a las jorobas de un camello. El nombre Camel se podría traducir como Mayúsculas/Minúsculas Camello. El término case se traduce como "caja tipográfica", que a su vez implica si una letra es mayúscula o minúscula y tiene su origen en la disposición de los tipos móviles en casilleros o cajas.
Existen dos tipos de Camel:
UpperCamelCase
lowerCamelCase
  • Hope:
  • El Hope es un pequeño lenguaje el de programación funcional desarrollado en el principios de los 80 antes de Miranda y de Haskell. Es notable por ser el primer lenguage de programación con la evaluación del llamado-por-patrón y tipos de datos algebraicos. El Hope es un lenguaje importante en el desarrollo de la programación funcional. 

    Un programa factorial en hope es: 

    dec fact : num -> num; 
    --- fact 0 <= 1; 
    --- fact n <= n*fact(n-1); 

    A diferencia del Haskell, el cambio de la orden de las cláusulas no cambiaría el significado del programa, porque en los modelos Hope, su adaptación favorece siempre patrones más específicos sobre los menos específicos. 

    Otra manera de la cual la esperanza diferencia de Haskell y ML es que los tipos en Hope están declarados explícitamente, en vez de ser deducido por un algoritmo de tipo-inferencia.
  • Erlang:
Es un lenguaje funcional y de programación concurrente, fue diseñado por la compañía Ericsson con el propósito de hacer aplicaciones que puedan soportar fallos, funcionamiento ininterrumpido, aplicaciones distribuidas, entre otras cosas.
Tiene una característica muy importante "el cambio de código en caliente" el cual se refiere a poder modificar el código aun cuando la aplicación esta corriendo. Erlang no seguía la filosofía de código abierto hasta 1998 cuando Ericsson lo cedió como tal.
Erlang es un lenguaje interpretado, aunque también se puede compila usando el compilador HiPE, aunque este compilador solo es para algunas plataformas es muy bueno porque pude soportar la concurrencia característica muy distintiva del lenguaje. Esta es la pagina oficial de HiPE.
Es posible que pensemos que entender este proceso de concurrencia es complicado y más aun aplicarlo en algún programa pero en Erlang la concurrencia es explicita y no implícita con en otros lenguajes.
El nombre de Erlang viene de las palabras Ericsson y Language.
Erlang lenguaje funcional
Los programa en Erlang están compuestos de bloques "funciones" y las identificamos por su nombre y el numero de argumentos de entrada también llamado "aridad". Por ejemplo las funciones multiplicacion/2, multiplicacion/3, multipicacion/4 pueden existir perfectamente juntas y llamándose a cada una según el numero de datos que se introduzca por el usuario, los resultados que devuelven las funcione son puede ser de cualquier elemento soportado por Erlang flotante, tupla, entero, lista.

  • F#(Functional#):
Es un lenguaje de programación, que proporciona la mejor combinación de seguridad, rendimiento y script, con todas las ventajas de ejecutarse en un runtime moderno. Se ejecuta sobre el Framework de .NET
Un lenguaje de programación de script, funcional, imperativo, orientado a objetos que es una base fantástica para realizar diversidad de tareas dentro de la programación:
Script interactivo como Phyton,
Ambiente interactivo de visualizacion de datos como MATLAB
Fuerte inferencia de tipos y seguridad de ML
Compilacion compatible compartida con el lenguaje popular OCaml
Un perfomance como C#
Facil acceso a todas las librerias de clases base que tenemos en .NET asi como herramientas de acceso a datos.
Manejo de esquemas
Una integración con Visual Studio
La velocidad de ejecucion de codigo nativo, ya sea portable, o distribuido.
El unico lenguaje que nos provee una combinacion como esta es F# que es pronunciado como FSharp, un lenguaje de programacion para scripts, funcional, imperativo, orientado a objetos, usado para muchas practicas cientificas, tareas en web, etc.

Comentarios

Publicar un comentario

Entradas populares