在我的Scala 课程中给出了一个例子。它是关于找到一个更通用的函数,它可以用来定义算术求和函数和算术产生函数。以下是应该概括的功能。
def sum(f:Int=>Int)(a:Int,b:Int):Int ={
if(a>b) 0
else f(a) + sum(f)(a+1,b)
}
def product(f:Int=>Int)(a:Int,b:Int):Int={
if(a>b)1
else f(a)*product(f)(a+1,b)
}
为了概括这些功能,老师给出了这样一个功能:
def mapReduce(f:Int=>Int,combine: (Int,Int)=>Int, zero:Int)(a:Int,b:Int):Int ={
if(a>b) zero
else combine(f(a),mapReduce(f, combine, zero)(a+1, b))
}
所以 mapReduce 函数可以用来概括 sum 和 product 函数如下:
def sumGN(f:Int=>Int)(a:Int,b:Int) = mapReduce(f, (x,y)=>(x+y), 0)(a, b)
def productGN(f:Int=>Int)(a:Int,b:Int) = mapReduce(f, (x,y)=>(x*y), 1)(a, b)
我查看了函数式编程中 map reduce 的定义,但我很难理解为什么上面的泛化函数被命名为 map reduce。我无法掌握这种关系。任何帮助都会让我很高兴。
问候