我正在阅读克里斯史密斯的编程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)
也许我没有得到整个类型的签名协议。任何帮助将非常感激。感谢
答案 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
。