Beruflich Dokumente
Kultur Dokumente
La programacin funcional
La programacin funcional, o mejor dicho, los lenguajes de programacin funcionales, son
aquellos lenguajes donde las variables no tienen estado no hay cambios en stas a lo largo del
tiempo y son inmutables no pueden cambiarse los valores a lo largo de la ejecucin. Adems
los programas se estructuran componiendo expresiones que se evalan como funciones. Dentro
de los lenguajes funcionales tenemos Lisp, Scheme, Clojure, Haskell, OCaml y Standard ML, entre
otros. Estos lenguajes estn diversidad de tipificacin, donde se encuentran lenguajes dinmicos,
estticos y estticos fuertes.
En los lenguajes funcionales las instrucciones cclicas como for, while y do-while no existen. Todo
se procesa usando recursividad y funciones de alto orden. Esto se debe a los fundamentos
matemticos de la mayora de los lenguajes funcionales, principalmente con bases en el sistema
formal diseado por Alonzo Church para definir cmputos y estudiar las aplicaciones de las
funciones llamado Clculo Lambda. En este sistema formal se puede expresar recursividad en las
funciones, y entre otras cosas interesantes, se pueden expresar combinadores funciones sin
variables libres como el Combinador de Punto Fijo o Y-Combinator, que expresa recursividad sin
hacer llamadas recursivas. En el Clculo Lambda existen tres transformaciones esenciales, la
conversin , la reduccin y la conversin . En la conversin se sustituyen los nombres de las
variables para dar ms claridad a la aplicacin de las funciones, por ejemplo evitando duplicados
en sus nombres. En la reduccin se traza el llamado de las funciones sustituyendo las funciones
por sus expresiones resultantes. Finalmente en las conversiones se busca las equivalencias de
trazado de funciones sustituyndolas por sus equivalentes. Estas transformaciones tambin
pueden ser aplicadas en los lenguajes funcionales o en su mayora dando lugar lenguajes que
cuentan con una gran expresividad y consistencia.
Caractersticas:
El nombre Lisp viene de "LISt Processing" (Proceso de LIStas). Una de las estructuras de datos
importante de Lisp son las listas encadenadas, el cdigo fuente de lisp est compuesto de listas.
Potencia:
POTENCIA
Break 101 [103]> (POTENCIA 1 2)
1
Break 101 [103]> (POTENCIA 2 2)
4
Break 101 [103]> (POTENCIA 2 5)
32
Break 101 [103]> (POTENCIA 3 3)
27
Break 101 [103]> (POTENCIA 3 3)
Factorial:
Algunos campos donde este tipo de lenguajes es aplicado son en la implementacin de Sistemas
Expertos (programas que generan una respuesta o una recomendacin sobre el tema para el que
estn implementados) o para la Generacin de nuevos Teoremas (dadas una serie de reglas,
generan teoremas).
Sin embargo, se ha demostrado que las ventajas de estos estilos pueden combinarse de
manera efectiva y til sobre un lenguaje nico. Los lenguajes lgico funcionales modernos ofrecen
caractersticas de ambos estilos. La semntica operacional de los lenguajes integrados esta
usualmente basada en narrowing, una combinacin de la unificacin y reduccin como mecanismo
de evaluacin que subsume a la reescritura y a SLD-resolucin.
Los programas escritos en ALF, se compilan y dan lugar a una serie de instrucciones de una
mquina virtual basada en Warren Abstract Machine (WAM) con mltiples extensiones para
soportar narrowing and rewriting. Actualmente, esta mquina virtual es un emulador y su
implementacin est basada en C.
Este lenguaje es open Source, por lo que cualquier usuario puedo introducir sus funciones y
modificarlo a su gusto. Aqu tenemos un ejemplo de este lenguaje. En este caso, es un archivo de
la librera predefinida, en el que se define lo que es un vector y sus propiedades.
Gdel programming language
Gdel es un lenguaje en el que las sentencias lgicas llevan un orden y en el que existe el
polimorfismo.
Est basado en mdulos (que aceptan polimorfismo) y en tipos de datos (soporta enteros y
racionales con una precisin infinita, y nmero en coma flotante) y tiene una amplia librera de
mdulos predefinidos.
Como curiosidad, se puede destacar que este lenguaje no funciona en un entorno Windows.
http://www.it.uc3m.es/jvillena/irc/practicas/estudios/Lenguajes_Logicos.pdf
http://computacion.cs.cinvestav.mx/~acaceres/courses/itesm/lp/clases/lp14.pdf
http://www.genbetadev.com/paradigmas-de-programacion/programacion-funcional-un-enfoque-
diferente-a-los-problemas-de-siempre