Haskell中的curried function和higher-order function
柯里化函数(curried function)和高阶函数(higher-order function),两种特殊的函数,初学Haskell时可能因为不理解这些概念而感到迷惑,在此作简要介绍。
什么是curried function
柯里化函数:一种返回值是一个函数的函数
函数:
函数是一种映射,对于符合要求的任意自变量$x$,$fx$会返回一个对应的$y$(返回值);程序中的$x, y$往往有其固定的数据类型。
curried function:
本质上也是一种函数,可以理解为“返回值是一个函数的函数”;
定义一个函数
1 |
|
由于Haskell中->
是right-associative的,实际上第一句等效于
1 |
|
所以这句程序相当于:
f 是一个函数,f 的唯一一个参数是 Integer类型的参数,在这里这一个参数是 x;
f 函数的返回值是一个函数,“这个函数”以 Integer为唯一参数,返回值是一个 Integer;
f x
即上一行提到的“f 返回的那个函数”,这个函数接收参数 y 后,返回一个 Integer.至此,整个函数结束。
使用时,f 2 3
,过程应该理解为(f 2) 3
什么是higher-order function
高阶函数:一种以函数作为参数的函数
定义一个函数
1 |
|
第一句实际上等效于
1 |
|
所以这句程序相当于:
twice 是一个函数,它的参数是一个
Integer -> Integer
的函数,它的返回值也是一个Integer -> Integer
的函数;f 在定义里面,是一个
Integer -> Integer
的函数,所以twice f
这一过程已经完成了twice函数的工作,并且返回了一个Integer -> Integer
的函数,“这个函数”以 x 作为参数,并且最终返回一个Integer
.至此,整个函数结束。
这个函数干了什么其实很好理解,比如假设f(x) = 2x + 1
(伪代码),twice f 2
就会输出11.
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!