Я знаю, что fold-left создает левые деревья, а fold-right - деревья с правым склоном, но когда я достигаю складки, я иногда оказываюсь увязшим в головокружающей мысли, пытаясь определить, какие вид складки является подходящим. Обычно я заканчиваю разворачивание всей проблемы и перехожу к реализации функции fold, так как это относится к моей проблеме.
Так что я хочу знать:
- Каковы некоторые эмпирические правила для определения того, нужно ли складывать влево или складывать вправо?
- Как я могу быстро решить, какой тип сгиб использовать, учитывая проблему, с которой я сталкиваюсь?
В Scala в качестве примера (PDF) используется пример использования функции fold, чтобы написать функцию, называемую flatten, которая объединяет список списки элементов в один список. В этом случае правильная складка является правильным выбором (учитывая способ объединения списков), но мне пришлось немного подумать об этом, чтобы прийти к такому выводу.
Поскольку сгибание является таким общим действием в (функциональном) программировании, я бы хотел быстро и уверенно принимать такие решения. Итак... какие-нибудь советы?