Funciones de orden superior. Considere una operación de reducción simple, sumando los elementos de una matriz. En un lenguaje imperativo, los programadores suelen escribirse a sí mismos un ciclo y realizar reducciones de un elemento a la vez.
Pero ese código no es fácil de hacer multi-threaded. Cuando escribes un ciclo, estás asumiendo un orden de operaciones y tienes que deletrear cómo pasar de un elemento al siguiente. Te gustaría decir "suma la matriz" y hacer que el compilador, el tiempo de ejecución o lo que sea, tome la decisión sobre cómo trabajar a través de la matriz, dividir la tarea según sea necesario entre múltiples núcleos y combinar esos resultados . Entonces, en lugar de escribir un bucle, con algún código de adición incrustado dentro de él, una alternativa es pasar algo que representa "adición" en una función que puede hacer la división. Tan pronto como hagas eso, estarás escribiendo funcionalmente. Está pasando una función (adición) a otra función (el reductor).Si escribe de esta manera, no solo obtiene un código más legible, sino que cuando cambia la arquitectura o desea escribir para una arquitectura heterogénea, no tiene que cambiar el verano, solo el reductor. En la práctica, es posible que tenga muchos algoritmos diferentes que todos comparten un reductor, por lo que este es un gran beneficio.
Esto es solo un ejemplo simple. Es posible que desee construir sobre esto. Funciones para aplicar otras funciones en matrices 2D, funciones para aplicar funciones a estructuras de árbol, funciones para combinar funciones para aplicar funciones (por ejemplo, si tiene una estructura jerárquica con árboles arriba y matrices a continuación) y así sucesivamente.
@James: Gracias. Se agregó una h adicional. –
Me atrevo a aventurar que las bibliotecas de escalamiento no están escritas en C/C++ porque se adapta bien al problema ... sino que es posible escribir un código de mayor rendimiento. – spender
@spender: Estoy de acuerdo en que es una especie de duplicado. Sin embargo, todas las respuestas a esa pregunta básicamente dicen "bueno, es porque en los programas funcionales no tienes un estado mutable". Esta pregunta es: "¿cómo conciliar la inmutabilidad con el modelado de problemas del mundo real, que generalmente requiere al menos algún estado mutable" (vale, eso no está explícitamente en esta pregunta, pero creo que eso es lo que implica la forma en que es redactado, podría estar equivocado). No creo que ninguna de las respuestas a la otra pregunta responda satisfactoriamente. –