F#Lambda签名

时间:2011-09-30 13:24:52

标签: .net f#

我正在阅读克里斯史密斯的编程F#,当我遇到兰巴达斯时试图找出F#。这是一个来自其中一个例子的lambda

let generatePowerOfFunc base = (fun exponent -> base ** exponent);;

我知道它接受某些东西并返回一个函数,但我得不到的是这个函数的签名是val generatePowerOfFunc : float -> float -> float

它有三个花车而不是两个花车?当有这种方法时

let powerOfTwo = generatePowerOfFunc 2.0;;

它只有2个浮点val powerOfTwo : (float -> float)

也许我没有得到整个类型的签名协议。任何帮助将非常感激。感谢

2 个答案:

答案 0 :(得分:3)

除了kongo2002:

->链中的最后一项是return type不是另一个参数。第一个接受两个浮点数并返回一个浮点数,第二个接受一个浮点数并返回一个浮点数。

这样做的想法,而不是像(float, float) : float这样的想法,就是你可以使用一种叫做“currying”的概念。 generatePowerOfFunc类型为float -> float -> float,相当于float -> (float -> float),因此我们可以给它一个浮点数并返回类型float -> float的函数(我们可以给它另一个浮动,并回到浮动)。

这意味着当您致电generatePowerOfFunc 2. 4.时,您应用两次。申请2.后,应用4.

答案 1 :(得分:2)

函数generatePowerOfFunc接受float类型的两个参数并返回float值:

val generatePowerOfFunc : float -> float -> float
//                        ^^^^^^^^^^^^^^
//                        arguments
//                                          ^^^^^
//                                          return value

函数powerOfTwo就像一个部分函数应用程序,只需要一个float参数(指数)并返回float