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