funcional es un paradigma de programacin que trata a la computacin como la evaluacin de funciones matemticas y evita datos mutables y que cambien de estado. Es un paradigma de programacin declarativa, lo que significa que la programacin se realiza con expresiones o declaraciones en vez de sentencias. En cdigo funcional, el valor resultante de una funcin depende solamente de los argumentos que le son pasados a la funcin, as que llamar a una funcin f dos veces con el mismo valor para un argumento x producir el mismo resultado f(x) cada vez. Eliminando efectos secundarios, por ejemplo cambios en el estado que no dependan de los inputs de la funcin, puede hacer que sea mas fcil de entender y predecir el comportamiento de un programa, lo cual es uno de los principal motivantes para el desarrollo de la programacin funcional Cul es el uso de la programacin funcional? Inteligencia artificial Procesamiento del lenguaje natural (SATELITE) Reconocimiento de voz (LOLITA) RAP (prototipado rpido de aplicaciones) Definicin de lenguajes Formalismo para definir otras teoras En los ltimos aos, la consolidacin de estndares como Haskell y la aparicin de compiladores cada vez ms eficientes, han hecho que se estn comenzando a usar en aplicaciones industriales: Programacin de sistemas de telecomunicaciones y telefona (Erlang) Programas para la asignacin de tripulaciones a vuelos (Haskell) Base de datos para e-commerce Otros. Ms usos
Herramientas para Web
Herramientas y aplicaciones para redes Software matemticos: - Constructor de dominio algebraico (DonCon) - Paquete matemtico para clculos (Mathscape) Aplicaciones numricas (MC-SYM, FFTW) Sistemas de bases de datos (Kleisli/CPL) Sistemas operativos (Smart-card) Sistema para iluminacin de teatro (Lula) Juegos Evaluacin perezosa
En la teora de lenguajes de programacin, La evaluacin perezosa (del ingls
lazy evaluation) o llamada por necesidad es una estrategia de evaluacin que retrasa el clculo de una expresin hasta que su valor sea necesario, y que tambin evita repetir la evaluacin en caso de ser necesaria en posteriores ocasiones. Esta comparticin del clculo puede reducir el tiempo de ejecucin de ciertas funciones de forma exponencial, comparado con otros tipos de evaluacin. Los beneficios de la evaluacin perezosa son: - El incremento en el rendimiento al evitar clculos innecesarios, y en tratar condiciones de error al evaluar expresiones compuestas. - La capacidad de construir estructuras de datos potencialmente infinitas. - La capacidad de definir estructuras de control como abstracciones, en lugar de operaciones primitivas. Caractersticas de la evaluacin perezosa La evaluacin perezosa aumenta la velocidad de creacin/inicializacin a costa de hacer despus algunas cosas mas lento. Tambin ahorra memoria al no crear cosas hasta que sean necesitadas, sin algn coste despus en el programa. Usualmente la gente se enfoca en rendimiento cuando hablan de evaluacin perezosa, pero los ahorros de memoria tambin son importantes. Lenguajes de programacin funcionales puros Un lenguaje de programacin puramente funcional, es un lenguaje que solo admite programacin puramente funcional. Programas puramente funcionales pueden ser escritos en lenguajes que no son puramente funcionales. Ejemplos de lenguajes de programacin funcionales puros: Agda, Charity, Clean, Coq (Gallina), Curry, Elm, Frege, Haskell, Hope, Joy, Mercury, Miranda, Idris, SequenceL Haskell
Haskell es un lenguaje de programacin estandarizado multi-propsito
puramente funcional con semnticas no estrictas y fuerte tipificacin esttica. Su nombre se debe al lgico estadounidense Haskell Curry. En Haskell, "una funcin es un ciudadano de primera clase" del lenguaje de programacin. Como lenguaje de programacin funcional, el constructor de controles primario es la funcin. El lenguaje tiene sus orgenes en las observaciones de Haskell Curry y sus descendientes intelectuales. En los aos 1980 se constituy un comit cuyo objetivo era crear un lenguaje funcional que reuniera las caractersticas de los mltiples lenguajes funcionales de la poca, el ms notable Miranda, y resolviera la confusin creada por la proliferacin de los mismos. Caractersticas de Haskell
Haskell cuenta con evaluacin perezosa, emparejamiento de patrones,
comprensin de listas, clases tipo y polimorfismo. Es un lenguaje puramente funcional, lo que significa que en general, las funciones en Haskell no tienen efectos secundarios. Haskell tiene un sistema de tipos fuerte y esttico basado en la inferencia de tipo Hindley-Milner. La principal innovacin de Haskell en este rea es el agregar clases tipo, originalmente concebidas como una manera de agregar sobrecarga al lenguaje, pero encontrando muchos mas usos. Requisitos de instalacin de Haskell
Para realizar la instalacin de la plataforma Haskell, solo es necesario
tener suficiente espacio en el disco duro, y contar con un sistema operativo. Descargar la versin de la plataforma Haskell de acuerdo con el sistema operativo que cuentas, desde la pagina oficial: https://www.haskell.org/platform/ Seguir las instrucciones de instalacin que vienen dentro de la pagina. Ejemplo de cdigo en Haskell
Funcin recursiva para calcular el factorial de un nmero natural:
--Funcin recursiva que calcula el factorial de un nmero natural
factorial :: Integer -> Integer factorial n | n < 0 = error "no existe el factorial para enteros negativos" | n == 0 = 1 | otherwise = n * factorial (n-1)