我正在研究高阶函数的定义。基于该定义,高阶函数可以接受值或函数,并创建一个函数或值作为输出。我正在读F#和Erlang的书,到目前为止,我还没有找到一个函数作为结果创建函数的地方,或者我已经看到了它,它没有作为结果函数出现在我面前。我理解了一个函数,将函数作为输入(比如Action或Func<> in C#),这里是一个基于F#上的wikibook的示例代码
open System
let square x = x * x
let cube x = x * x * x
let sign x =
if x > 0 then "positive"
else if x < 0 then "negative"
else "zero"
let passFive f = (f 5)在这个例子中,passFile是一个高阶函数,它反过来创建一个函数作为输出吗?如果是的话,难道没有人能给我举一个简单的例子,说明函数产生函数的结果吗?
发布于 2014-09-11 04:29:46
最简单的例子只是一个匆匆的函数。
拿走
let multiply (a : int) (b : int) : int = a * b例如。只是写这是个签名你有个类似的东西
int -> int -> int 这真的是
int -> (int -> int)因此,这个是,一个接受一个整数(a)并返回另一个函数的函数:
multiply 5 == fun b -> 5 * b正如您所看到的,在使用curried函数时,函数编程/ F#中到处都是高阶函数。
您在另一边的示例可以重写为:
let passFive (f : int -> 'b) : 'b = f 5因此,这是一个高阶函数,它接受一个函数(f),但它不返回一个函数--顾名思义,它将一个5传递给您调用它的每个函数(另一个常用名称可能是应用5)。
发布于 2014-09-11 06:16:55
另一个例子是组合运算符(>>)和(<<)。这些函数包含两个函数,并将它们组合成一个单独的函数。例如:
let twoNPlusOne = (*) 2 >> (+) 1操作符的类型是('a -> 'b) -> ('b -> 'c) -> ('a -> 'c);在本例中,所有类型变量都是int,因为操作数都是int -> int,结果也是如此。
https://stackoverflow.com/questions/25778534
复制相似问题