¿Consejos para aprender a “pensar funcionalmente”?

Como novato en lenguajes funcionales (comencé a tocar Erlang hace un par de semanas, el primer lenguaje funcional que pude tener en mis manos).

Comencé a escribir algunos algoritmos pequeños (comoleft_rotate_list, bubble_sort, merge_sort etc.). Me encontré a menudo perdiéndome en decisiones como "¿debería usar una lista de ayuda para el almacenamiento de resultados intermedios?" y "¿Debo crear una función de ayuda para hacer esto?"

Después de un tiempo, encontré que la programación funcional (soporta si lo que estoy hablando no tiene sentido en absoluto) fomenta un diseño "de arriba abajo": es decir, cuando hago merge_sort, primero escribes todos los pasos de clasificación de combinación, y nombrarlos como funciones de ayuda individual; y luego implementas esas funciones auxiliares una por una (y si necesitas dividirlas en mayor medida, hazlo con el mismo enfoque).

Esto parece contradecir un poco el diseño de OO, en el que puede comenzar desde abajo para construir la estructura de datos básica y luego ensamblar la estructura de datos y los algoritmos en lo que desee.

Gracias por los comentarios. Sí, quiero obtener consejos sobre cómo "pensar en lenguaje funcional" (como "pensar en Java", "pensar en C ++").

Respuestas a la pregunta(5)

Su respuesta a la pregunta