私の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 関数を使用して、次のように合計関数と積関数を一般化できます。
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 と名付けられた理由がわかりません。関係が掴めない。どんな助けでも私はとても幸せになります。
よろしく