您的位置:首页 > 编程语言 > C语言/C++

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

2006-10-30 19:47 573 查看
在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)□


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说起
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐