高阶函数 Higher-order function

来源:互联网 发布:武侠台词 知乎 编辑:程序博客网 时间:2024/06/05 07:06

偶然看到一小段关于高阶函数的讨论。所以认真查了下。
其实关于这个名词,我相信很多人和我一样早就听说过。只是平时的工作几乎用大着,也就没太认真的思考过。
wiki英文版在此


看完后感觉还是挺简单的,不难理解。虽然wiki一如既往的啰嗦了一大堆,说得很学院。给出了很多编程语言的例子。bla bla bla~~
但其第一句就已经给出了定义。满足以下两个条件之一的函数。

takes one or more functions as an input接受一个或多个函数做为输入outputs a function输出一个函数

关于现代众多的编程语言怎么支持高阶函数也就不多说了。说一下C语言的一个函数 stdlib qsort
这个函数写C的一定很熟悉。能够对任意类型的一块连续内存进行快速排序。原型如下:

void qsort (void* base, size_t num, size_t size,            int (*compar)(const void*,const void*));

前3个参数是描述输入的数组,1是地址,2是个元素个数,3是每个元素大小。最后是一个比较用的函数。所以这是个不折不扣的高阶函数。
这个输入的函数原型如下:
int compar (const void* p1, const void* p2);
输入参数是元素的地址,然后通过返回一个正型来表示这两个元素的大小,进而影响排序的结果。
int数组排序的函数如下:

int compare (const void * a, const void * b){  return ( *(int*)a - *(int*)b );}

这里是升序,只要把a,b互换就变为了降序。还可以通过把指针类型转换对机构体进行比较排序。
通过以上这些可以看出qsort函数 设计的精巧,功能的强大。数组的输入通过void*屏蔽了具体的数据类型,后面比较函数的输入更是把排序的逻辑抛到了外部。由此使得这个函数变得无比的通用。


很早之前高阶函数就已经出现了,虽然不知道这个函数是什么时候编写的,但应该够老了吧。
高阶函数的使用使得这个函数的逻辑更高度的被抽象了,也就是通用性的来源。也就是函数行为和关键逻辑的分离。

这年头从来不缺技术的支持,缺的是抽象的能力啊~
小感慨一下,要想写好高阶函数真不是件容易的事啊。

0 0
原创粉丝点击