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