Conselhos sobre a aprendizagem "Como pensar funcional"?

Como novato em linguagens funcionais (comecei a tocar em Erlang algumas semanas atrás - a primeira linguagem funcional em que consegui colocar minhas mãos).

Comecei a escrever alguns pequenos algoritmos (comoleft_rotate_list, bubble_sort, merge_sort etc). Muitas vezes me perdi em decisões como "devo usar uma lista de ajuda para armazenamento de resultados intermediários?" e "devo criar uma função auxiliar para fazer isso?"

Depois de um tempo, descobri que a programação funcional (ponho comigo se o que estou falando não faz sentido algum) incentiva um design "top down": ou seja, quando eu faço merge_sort, você primeiro escreve todas as etapas de mesclagem, e nomeá-los como funções auxiliares individuais; e, em seguida, você implementa essas funções auxiliares uma por uma (e, se precisar dividir ainda mais essas funções auxiliares, faça isso na mesma abordagem).

Isso parece contradizer um pouco o design OO, no qual você pode começar de baixo para construir a estrutura básica de dados e, em seguida, montar a estrutura de dados e os algoritmos no que você deseja.

Obrigado por comentários. Sim, quero receber conselhos sobre como "pensar em linguagem funcional" (como "pensar em Java", "pensar em C ++").

questionAnswers(5)

yourAnswerToTheQuestion