用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说起
简单来说,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说起
相关文章推荐
- 用C语言实现函数语言中的Map和Reduce操作
- 不要使用JavaScript内置的parseInt()函数,利用map和reduce操作实现一个string2int()函数:
- JS学习笔记1——不要使用JavaScript内置的parseInt()和Number()函数,利用map和reduce操作实现一个string2int()函数
- 第四周《C语言及程序设计》实践项目26 实现线性表基本操作的函数
- 利用map和reduce编写实现字符串转化为浮点数的str2float()函数
- c程序设计语言_习题8-6_利用malloc()函数,重新实现c语言的库函数calloc()
- 实例讲解hadoop中的map/reduce查询(python语言实现)
- 【C语言】keybd_event 函数,实现模拟按键操作
- 文件操作,及文件操作时的权限设置,快速实现文件拷贝,C语言常用IO函数
- 【语言工具】Python闭包,装饰器,生成器,偏函数,函数式编程,lamda,map,reduce,filter
- C语言模拟实现字符串操作函数
- Python 第三篇(上):python文件基础操作、json模块、lambda、map、filter、reduce和函数位置参数
- 自己编写c语言实现的字符串操作函数
- 【C语言】编写一个函数reverse_string(char * string)(递归实现),将参数字符串中的字符反向排列,不能使用C函数库中的字符串操作函数。
- 第7周 C语言及程序设计提高例程-26 实现线性表基本操作的函数
- 【C语言基础】C语言实现动态通讯录的基本操作
- 【转】字符串操作函数 C语言实现 (strcpy, strncpy, memcpy, memset, strcat, strlen ... )
- 实例讲解hadoop中的map/reduce查询(python语言实现)
- C语言实现字符串操作函数的实例
- 【C语言】编写一个函数reverse_string(char * string) 实现:将参数字符串中的字符反向排列。要求:不能使用C函数库中的字符串操作函数。