在我的Scala course中給出了一個例子。這是關於找到一個更廣義的函數,它可以用來定義一個算術求和函數和一個算術生成函數。以下是應該推廣的功能。很難理解爲什麼這個函數被稱爲MapReduce
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功能,可以用來概括和與產品功能如下:
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以上。我無法把握這種關係。任何幫助都會讓我很開心。
問候
非常感謝。 – cgon