gpt4 book ai didi

scala - 很难理解为什么这个函数被称为 MapReduce

转载 作者:行者123 更新时间:2023-12-01 08:34:51 24 4
gpt4 key购买 nike

在我的Scala course举了一个例子。它是关于找到一个更通用的函数,它可以用来定义算术求和函数和算术产生函数。以下是应该概括的功能。

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。我无法掌握这种关系。任何帮助都会让我很开心。

问候

最佳答案

函数式编程通常具有三个中心运算符:mapreduce(有时称为fold)和filter .

  • Map 接受一个列表和一个操作,并生成一个列表,其中包含应用于第一个列表中所有内容的操作。
  • 过滤器接受一个列表和一个测试,并生成另一个列表,其中仅包含通过测试的元素。
  • Reduce(或折叠)接受一个列表、一个操作和一个初始值,并将该操作应用于初始值和列表中的元素,将输出与下一个列表项一起传递给自身,产生操作和的列表。

例如,如果您的列表是 [2,3,4,5,6,7],您的初始值为 1,并且您的操作是加法,则归约的行为方式如下:

Reduce([2,3,4,5,6,7], +, 1) = ((((((initial + 2) + 3) + 4) + 5) + 6) + 7)

您的讲师可能会称它为 mapReduce,因为这是范例的名称,尽管简单的 reduce 也足够了。

如果你对他的名字的意义感到好奇,你应该问他。他是你的导师。

关于scala - 很难理解为什么这个函数被称为 MapReduce,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12783069/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com