Estou ciente de que a dobra para a esquerda produz árvores inclinadas para a esquerda e a dobra para a direita produz árvores com inclinação para a direita, mas quando procuro uma dobra, às vezes me encontro atolado em pensamentos que induzem a dor de cabeça tentando determinar que tipo de dobra é apropriado. Eu geralmente acabo resolvendo todo o problema e percorrendo a implementação da função de dobra conforme se aplica ao meu problema.
Então, o que eu quero saber é:
- Quais são algumas regras básicas para determinar se dobrar para a esquerda ou direita?
- Como posso decidir rapidamente que tipo de dobra usar, considerando o problema que estou enfrentando?
Há um exemplo em Scala por Exemplo (PDF) de usar uma dobra para escrever uma função chamada nivelar, que concatena uma lista de listas de elementos em uma única lista. Nesse caso, uma dobra certa é a escolha adequada (dada a forma como as listas são concatenadas), mas tive que pensar um pouco sobre isso para chegar a essa conclusão.
Visto que dobrar é uma ação comum na programação (funcional), gostaria de poder tomar esse tipo de decisão com rapidez e confiança. Então ... alguma dica?