Вы знаете, как flatmap берет последовательность элементов и преобразует каждый из них в новую подпоследовательность, объединяя все подпоследовательности:
[A, B, C] -> [A1, A2, B1, B2, B3, C1]
Есть ли название для преобразования, которое делает обратное? Что-то вроде:
[A1, A2, B1, B2, B3, C1] -> [A, B, C]
Конкретным примером, который заставил меня задуматься об этом, была оценка математических выражений:
1 * 2 + 3 * 4 + 5 + 6 * 7 * 8
-> 2 + 12 + 5 + 6 + 336
-> 361
По отдельности, оценка 6 * 7 * 8
выглядит как классический reduce
шаг, в то время как решение о том, какие блоки должны быть сокращены, потребует повторных takeWhile
шагов.
Я знаю, как сделать это классическим итеративным способом, отслеживая индексы и все такое. В большинстве случаев я нашел хорошую функциональную замену большинству итерационных шаблонов. Есть ли имя для отдельной операции, которая делает это, или простой набор операций, который может быть составлен для создания этого эффекта?