Когда вы применяете foldLeft
, тогда ваше начальное значение объединяется с первым элементом списка.Результат объединяется со вторым элементом списка.Этот результат с третьего и так далее.В конце концов, список свернулся до одного элемента того же типа, что и начальное значение.Поэтому вам просто нужен какой-то тип, который может быть объединен вашей функцией с элементом списка.
Для foldRight
применяется то же самое, но в обратном порядке.
fold
не гарантирует порядок скомбинации сделаны.И это не гарантирует, что он начинается только с одной позиции.Складки могут происходить параллельно.Поскольку у вас может быть параллелизм, требуется, чтобы любые 2 элемента списка или возвращаемые значения могли быть объединены - это добавляет ограничение к типам.
Что касается вашего комментария о том, что вы должны увидеть случай, когда порядок влияетПредположим, что вы используете сгибы для объединения списка символов и хотите, чтобы в результате вы получили текст.Если вы вводите A, B, C
, вы, вероятно, хотели бы сохранить порядок для получения ABC
вместо ACB
(например).
С другой стороны, если вы, скажем, просто складываете числа,порядок не имеет значения.Суммирование 1, 2, 3
дает 6
независимо от порядка сложений.В таких случаях использование fold
вместо foldLeft
или foldRight
может привести к более быстрому выполнению.