1 函数式编程
函数y=f(x)就是个x->y的映射,其仅仅是x和y的关系,其运算关系仅仅是依赖参数x并不涉及其它外部状态,函数式编程中就把每个函数理解为数学意义上的函数f(x)。在函数式编程中,每个语句是一个表达式都是执行单纯的计算并有返回值,而C中的语句是执行某种操作如赋值,且计算是由函数完成的,仅仅依赖于输入参数。如一条简单的函数语句,功能是(1+2)*3-4:
var result = subtract (multiply (add (1,2), 3), 4);
其运算过程是不同的函数组成的。函数和其它数据类型一样平等的,可以作为参数、返回值,且函数式编程中变量是不变的可以理解为都是const,这就表明函数式编程不改变对象的状态。函数内部不与外部互动(不会涉及修改全局变量等),从而利于并行化。函数编程还有个特点是具备重现能力。
C++中本身也具有函数式的身影,比如:sin,cos这些函数。C++11中的lambda表达式,std::bind,std::function,std::auto均为函数式编程实现提供了可能。这里将采用函数式来简化并行化编程,在传统的并行化编程中涉及到共享内存、状态等,使用mutex、condition_variable等机制同步线程,而在函数式编程中每个函数只与输入参数相关且不修改外部状态,只负责计算,这使得某些并行化计算可以采用函数式编程思想。
1.1 下面是传统的快速排序采用递归实现的例子:(非稳定排序)
template<typen