Professional Documents
Culture Documents
Utilidad
El objetivo es conseguir lenguajes expresivos y matemticamente
elegantes, en los que no sea necesario bajar al nivel de la mquina para
describir el proceso llevado a cabo por el programa, y evitar el concepto de
estado del cmputo. La secuencia de computaciones llevadas a cabo por el
programa se rige nica y exclusivamente por la reescritura de definiciones
ms amplias a otras cada vez ms concretas y definidas, usando lo que se
denominan "definiciones dirigidas".
Caractersticas
Transparencia referencial.
Al no haber variables, no hay efectos laterales, es decir, al ejecutar la
funcin (aunque ya hemos visto que el concepto de ejecutar no existe como
tal) no cambiar nada fuera del entorno de sta. Tampoco depender para
nada de lo que haya en ese entorno. Se dice que una funcin tiene
transparencia referencial si, para un valor de entrada, produce siempre la
misma salida. En programacin funcional esto es siempre as por definicin.
Evaluacin perezosa (Lazy evaluation).
Para una mente acostumbrada a lo imperativo esto cuesta de entender, as
que atencin. Al no tener que seguir una serie de rdenes, una tras otra,
algunos los lenguajes funcionales slo evalan lo que les es requerido en
cada momento. Esto permite cosas como el cdigo Haskell take, que
significa coger los cinco primeros nmeros de una lista infinita de nmeros
empezando por el 1. En un lenguaje imperativo, esto llevara a un bucle
infinito mientras se genera la lista. En Haskell, slo se genera lo que se
necesita; en este caso, los cinco primeros nmeros. Esto puede redundar en
una ejecucin ms eficiente y un cdigo ms claro y cercano al matemtico.
Altsima abstraccin.
Los lenguajes funcionales implementan muchsimos mecanismos de
abstraccin que te hacen la vida muy, muy feliz. Un brutal sistema de tipos
de datos, polimorfismo en muchos niveles, y un montn de nuevos
conceptos como funciones de orden superior, functores, mnadas Las
inevitables operaciones que no son puramente funcionales, como la
entrada/salida o los nmeros aleatorios, quedan envueltos en abstracciones
que resuelven la papeleta con elegancia.
Elegancia, legibilidad, flexibilidad.
Funcin pura
Funciones y expresiones puras: Como este paradigma evita los efectos
colaterales permite eliminar expresiones sin temer a que esto pueda afectar
a otra cosa, garantiza que si una funcin es llamada con ciertos argumentos
Recursividad
Las funciones recursivas son aquellas que se invocan a s mismas en algn
momento de su ejecucin. En anlisis de Algoritmos las tcnicas recursivas
se usan mucho para la solucin de Problemas. Esta forma en anlisis de
Algoritmos es llamada "divide y vencers". Para poder resolver un problema
de forma recursiva es necesario saber alguna solucin no recursiva para
alguno de los casos ms sencillos. "Usamos la solucin ms simple para
resolver un problema ms complejo" As, todo mtodo recursivo debe tener
al menos una sentencia que devuelva un resultado (la solucin del caso ms
sencillo) y las sentencias necesarias para acercarse en cada invocacin a
ese caso. La recursin permite programar algoritmos aparentemente
complicados con un cdigo simple y claro, ahorrando trabajo al programador