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:
Publicar un comentario