用C语言实现函数语言中的Map和Reduce操作

来源:互联网 发布:新手debian和ubuntu 编辑:程序博客网 时间:2024/05/21 09:10
在Google 的论文《MapReduce:Simplified Data Processing on Large Clusters》中提到“Our abstraction is inspired by the map and reduce primitives present in Lisp and many other functional lanuages.”。对于大部分不熟悉函数语言的程序员来说,可能并不能够彻底理解Map和Reduce的具体含义。在这篇文章中,将采用C语言实现函 数语言中的Map和Reduce操作。
简单来说,Map是对一组数据中的每个元素进行操作,产生一组全新的数据;Reduce是对这组数据进行归约,得到一个相对简单的结果。现在就让我们用C语言来描述它们。
#include <stdio.h>
//函数指针申明
typedef int (*mapFunction)(int);
typedef 
int (*reduceFunction)(int,int);
#define ERROR -1;

//-----------------Map和Reduce操作-----------------
/*
* 对list数组的数据进行处理,然后存储在list数组中
*/

void map(mapFunction func,int *list,int len){
int i;
for(i=0;i<len;i++){
list[i] 
= func(list[i]);
}

}


int reduce(reduceFunction func,int *list,int len){
if(len <= 0){
return ERROR;
}

int retVal = 0;
int i;
for(i=0;i<len;i++){
retVal 
= func(retVal,list[i]);
}

return retVal;
}


//-----------------------测试-------------------------
int square(int i){
return i*i;
}


int add(int i,int j){
return i+j;
}


int main(int argc,char*argv[]){
int array[5];
int i;
for(i=0;i<5;i++){
array[i] 
= i;
}


mapFunction mapFuncPointer 
= (mapFunction)&square;
reduceFunction reduceFuncPointer 
= (reduceFunction)&add;
map(mapFuncPointer,array,
5);
int result = reduce(reduceFuncPointer,array,5);
printf(
"The result is %d ",result);
return 0;
}
 参考:(1) 从Map和Reduce说起
原创粉丝点击