Вы знаете, как 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
.
Я знаю, как сделать это классическим итеративным способом, отслеживая индексы и все такое. Для большинства случаев я нашел хорошую функциональную замену большинству итеративных паттернов. Есть ли название для одной операции, которая это делает, или простой набор операций, которые можно составить для создания такого эффекта?