Dans mon Cours Scala un exemple a été donné. Il s'agissait de trouver une fonction plus généralisée, qui peut être utilisée pour définir une fonction de sommation arithmétique et une fonction de production arithmétique. Voici les fonctions qui doivent être généralisées.
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)
}
Pour généraliser ces fonctions, le professeur a donné une telle fonction :
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))
}
La fonction mapReduce peut donc être utilisée pour généraliser les fonctions somme et produit comme suit :
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)
J'ai jeté un coup d'œil à la définition de map reduce dans la programmation fonctionnelle mais j'ai du mal à comprendre pourquoi la fonction généralisée a été nommée map reduce ci-dessus. Je n'arrive pas à saisir la relation. Toute aide sera la bienvenue.
Salutations