Functional programming 平面地图的功能对立面?

Functional programming 平面地图的功能对立面?,functional-programming,Functional Programming,您知道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 单独

您知道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
步骤


我知道如何用经典的迭代方法来实现这一点,跟踪索引和所有这些。对于大多数情况,我已经找到了一个很好的函数替换大多数迭代模式。有没有一个单独的操作的名称,或者一组简单的操作可以组合成这样的效果?

我认为与
flatmap
相反的是
groupby

$ python3
>>> from itertools import groupby
>>> groupby(['A1', 'A2', 'B1', 'B2', 'B3', 'C1'], lambda x: x[0])