在我的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)
}
Run Code Online (Sandbox Code Playgroud)
为了概括这些功能,老师给出了这样一个功能:
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))
}
Run Code Online (Sandbox Code Playgroud)
因此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)
Run Code Online (Sandbox Code Playgroud)
我看了一下函数式编程中map reduce的定义,但是我很难将泛化函数命名为map reduce.我无法理解这种关系.任何帮助都会让我非常开心.
问候
函数式编程通常有三个中心运营商:map,reduce(有时称为fold),和filter.
例如,如果您的列表是[2,3,4,5,6,7],您的初始值为1,并且您的操作是添加,则减少将按以下方式运行:
Reduce([2,3,4,5,6,7], +, 1) = ((((((initial + 2) + 3) + 4) + 5) + 6) + 7)
Run Code Online (Sandbox Code Playgroud)
您的教练可能正在调用它,mapReduce因为这是范例的名称,尽管reduce也足够了.
如果你对他名字的重要性感到好奇,你应该问他.他是你的导师和所有人.
| 归档时间: |
|
| 查看次数: |
1203 次 |
| 最近记录: |