题
我有一个问题,关于两种类型int->(int->int)和(int->int)->int。什么是这两者之间的区别?
我读了这里的某个地方,第一一个可以被解释为一个功能,这需要一个int和返回的一个函数,并int和返回的一个int,这是相同int->int->int。是这个吗?
解决方案
之间的差异 int -> (int -> int)
和 int -> int -> int
是可以忽略不计(你真的只在乎如果你要的互操作与另一语言)。这些都是扩充的职能,有效地采取两个整数和返回的整数(例如,建立外操作者具有类型沿着这些线)。
然而,这些都是非常不同 (int -> int) -> int
, ,这需要一个 功能 从整数到整数和返回的一整数。正如其他人已经提到,只有简单的例子中的这种功能适用的特定功能以特定的价值(例如 fun (f:int->int) -> f 13
).
其他提示
很好的问题,我怀疑在功能上没有太大区别。我花了一些时间在摆弄,试图弄清楚如何获得这两个签名。(约翰·帕尔默的let fun1 i = fun j -> i + j
只是为我提供了int -> int -> int
)
通用标签
我想不出第二签名的一个人为的例子: 通用标签
(这不会直接回答您的问题,但可能会给其他人带来帮助)
我不太了解F#,但是看起来很直观(很多其他语言都有相同的概念)。
- 是一个接受一个int并返回一个接受一个int并返回一个int的函数的函数
- 是一个接受一个int并返回一个int并返回一个int的函数的函数
第一个类似于咖喱函数。
所以,让我们看看什么样的实现方式就是这样的:
第一
let func1 i = fun j -> i+j
这有一个签名 int -> (int -> int)
注意, func1 2 3
不工作
编辑: 事实证明,由于方法的关联性工作这实际上是现
但这是不同的
let func2 i j= i+j
其中有一个类型的 int -> int -> int
在这里, func2 1 2
是好的
其他例子,我们可以创建这样的:
let func4 a = a 1
这将有一个签名 ('t->int) -> u
挑选一个具体 a
将工作。注意, func4 1 2
肯定会不汇编