Советы по обучению «Как думать функционально»?

Как новичок в функциональных языках (я начал трогать Erlang пару недель назад - первый функциональный язык, который я мог заполучить).

Я начал писать небольшие алгоритмы (такие какleft_rotate_list, bubble_sort, merge_sort и т.д.). Я часто теряюсь в таких решениях, как «использовать ли вспомогательный список для хранения промежуточных результатов?» и "я должен создать вспомогательную функцию, чтобы сделать это?"

Через некоторое время я обнаружил, что функциональное программирование (имейте в виду, что то, о чем я говорю, вообще не имеет смысла) поощряет дизайн «сверху вниз»: то есть, когда я выполняю merge_sort, вы сначала записываете все шаги сортировки слиянием, и назовите их как отдельные вспомогательные функции; и затем вы реализуете эти вспомогательные функции одну за другой (и если вам нужно дополнительно разделить эти вспомогательные функции, сделайте это в том же подходе).

Это, кажется, немного противоречит дизайну ОО, в котором вы можете начать снизу, чтобы построить базовую структуру данных, а затем собрать структуру данных и алгоритмы в то, что вы хотите.

Спасибо за комментарии. Да, я хочу получить совет о том, как «думать на функциональном языке» (так же, как «думать на Java», «думать на C ++»).

Ответы на вопрос(5)

Ваш ответ на вопрос