Higher-order function(高阶函数)

高阶函数

在数学和计算机科学中,高阶函数是至少具有下列功能之一的函数:

  • 将一个或多个函数作为参数(即过程参数)。
  • 返回一个函数作为结果。

所有其他函数都是一阶函数。在数学中,高阶函数也称为算子或泛函。微积分中的微分算子是一个很常见的例子,因为它把一个函数映射到它的导数,也是一个函数。在整个数学过程中,高阶函数不应与“函子”一词的其他用法混淆,参见函子(消除歧义)。

在无类型的匿名微积分,所有的函数都是高阶。一个有类型的匿名的微积分,大部分的编程函数语言从里面派生出来,以一个函数作为参数的高阶函数是具有表单类型的值。在这里插入图片描述

普遍例子

  • map函数在许多函数式编程语言中都有,它是高阶函数的一个例子。它接受一个函数f和一个元素列表作为参数,结果返回一个新列表,其中f应用于列表中的每个元素。
  • 排序函数,它将比较函数作为参数,允许程序员将排序算法与正在排序的项的比较分开。C标准函数qsort就是一个例子。
  • fold
  • Function composition
  • Integration
  • Callback
  • Tree traversal

编程语言支持

直接支持

这些示例并不打算比较和对比编程语言,而是作为高阶函数语法的示例。
在下面的示例中,高阶函数两次接受一个函数,并两次将该函数应用于某个值。如果必须对同一个f应用两次,那么最好返回一个函数而不是一个值。这符合“不要重复自己”的原则。

OCAML(简单一个例子)

直白的:

let add3 x = x + 3

let twice f x = f (f x)

print_int (twice add3 7) (* 13 *)

一行:

print_int ((fun f x -> f (f x)) ((+)3) 7) (* 13 *)

Python

>>> def twice(f):
...   def result(a):
...     return f(f(a))
...   return result

>>> plusthree = lambda x: x+3

>>> g = twice(plusthree)
    
>>> g(7)
13

java的代码(对于我小白来说有点反人类)

Function<Function<Integer, Integer>, Function<Integer, Integer>> twice = f -> f.andThen(f);
twice.apply(x -> x + 3).apply(7); // 13

你可能感兴趣的:(计算机基础/原理,高阶函数)