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

在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;
}

你可能感兴趣的:(函数,map,C语言,reduce,休闲)