我有一个问题,关于两种类型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#,但是看起来很直观(很多其他语言都有相同的概念)。

  1. 是一个接受一个int并返回一个接受一个int并返回一个int的函数的函数
  2. 是一个接受一个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 肯定会不汇编

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top