函数式编程中折叠/归约后执行单次函数的模式名称咨询
函数式编程中先归约后转换的模式名称
我刚接触函数式编程,想了解是否存在一种正式模式或数据类型,能先通过monoid执行fold/reduce操作,再对归约结果执行一次函数生成汇总信息。比如计算数组平均值时,先把数组归约成[count, sum]元组,再用总和除以计数得到结果。以下是我用TypeScript实现的代码(空数组会报错):
const reduceSummarize = <T, U, V>( array: T[], reducefn: (result: U, nextValue: T) => U, initialValue: U, afterfn: (result: U) => V ) => { return afterfn(array.reduce(reducefn, initialValue)); }; const incrementCountSum = ( countSumTuple: [number, number], nextValue: number ): [number, number] => [countSumTuple[0] + 1, countSumTuple[1] + nextValue]; const tupleRatio = (tuple: [number, number]) => tuple[1] / tuple[0]; reduceSummarize([1, 2, 3, 4], incrementCountSum, [0, 0], tupleRatio) // 2.5
请问这种模式是否有特定名称?
这种模式没有特别生僻的专属术语,但在函数式编程语境里,它通常被称为折叠后映射(Fold then Map),本质上就是将归约(fold/reduce)操作与后处理函数进行函数组合——你把归约的输出直接作为后处理函数的输入,用组合的方式完成从原始数据到最终汇总结果的转换。
针对你例子里这种先收集计算最终结果所需的全部中间数据、再推导结果的场景,也可以把它看作是带后处理的聚合模式。需要注意的是,这里的后处理函数不需要保持monoid的结构(比如平均值计算就不满足monoid的结合律),所以它不属于monoid同态这类范畴概念,就是普通的函数组合应用。
内容的提问来源于stack exchange,提问作者Adam B.
相关产品推荐
相关产品推荐

