Publicidad

sábado, 8 de noviembre de 2008

Lenguajes Funcionales

Ya sabemos como es el BNF, un serie de reglas de transformación que sirven para descomponer un símbolo en otros símbolos hasta llegar en símbolos terminales, o sea primitivos. BNF es para definir un lenguaje como un lenguage de programación. Pero, el BNF es también un lenguaje, sólo que no es un lenguaje de programación. Existen lenguajes de programación que son parecidos al BNF. Un programa funcional consiste nada en más que funciones definidas en términos de otras funciones hasta llegar en funciones primativas. En programas imperativos normalmente hay una función principal (“main”) que llama otras funciones. En programas funcionales normalmente hay una función principal definida por otros funciones hasta llegar en funciones primitivas, como es el BNF. O se puede pensar en un programa funcional como un serie de llamadas a otras funciones, que llaman otras funciones sin nada más (por ejemplo, sin reasignacion del valor de un variable).

Cuando se corre un programa funcional una función está remplazado con otras funciones declaradas como equivalentes hasta llegar en funciones primativas, que son muy simples. El programador crea las reglas de tranformación, o sea equivalencias, y estas reglas forman el conteudo del programa. Porque las lineas del programa son puras transformaciones de funciones equivalentes (suponiendo que el programador tiene su lógica correcta) nada neuvo esta agregado. No hay pasos afuera de estas tranformaciones como reasignaciones de valores varias veces. Hay unos valores de entrada y un valor de salida y nada más en cada paso. Nada pasa afuera de los definiciones y tranformaciones de una definición en unas otras. Por ejemplo, en vez de hacer una asignación como “i = i + 1” tienes que “llamar” a una funcion que toma el primero valor de i como entrada y da el segundo valor de i como salida. (Solo es permitido inicializacion de variables a ser pasado a una funcion, no reasignaciones dentro de la funcion llamada.)

Programación funcional facilita modularización de un programa porque su naturaleza es un serie de descomposiciones. Una otra ventaje de un programa de puros equivalencias es que el orden de las lineas no importa. Es como un dicionario: se busca la linea que dá la definicion precisa para complir una tranformación. El compilador puede generar código para que el procesador regrese a la linea cierta para poder hacer esto. Entonces, se puede cambiar el orden de un programa sin nada inesperada, o hasta que tener más que un procesador corriendo diferentes partes del mismo programa en paralelo. Si la parte del programa corriendo en un procesador necesita los resultados del parte corriendo en un otro procesador, el primero procesador simplemente espera para ellos.

No hay comentarios: