OCaml - 给出一个类型的函数(int - > int) - > INT

时间:2016-08-15 21:18:11

标签: function types functional-programming arguments ocaml

我完全迷失了。有人解释说,函数是正确的,因此let add x y = x + y;;的函数类型为int -> int -> intint -> (int -> int)

我不确定如何定义(int -> int) -> int类型的函数。我在想我的第一个参数是一个传入int并返回int的函数。我试过了:

let add = fun x y -> x + y --- int -> int -> int

let add = fun f x = (f x) + 3 --- ('a -> int) -> 'a -> int

3 个答案:

答案 0 :(得分:2)

怎么样?
let eval (f: int -> int) :int = f 0

答案 1 :(得分:0)

fun x -> (x 1) + 1;;
- : (int -> int) -> int = <fun>

let foo f = (f 1) + 1;;
val foo : (int -> int) -> int = <fun>

就像

一样
foo (fun x -> x + 1);;
- : int = 3

答案 2 :(得分:0)

您的问题与Currying的概念高度相关。

但在此之前,让我说如果你想编写一个需要参数作为函数的函数,你可以声明一个普通函数,并像函数一样使用它的参数。无需复杂化。见前:

let f x = x(10) + 10

现在是曲线部分。在OCaml中,一次只对一个参数进行语义评估,并在评估参数后返回匿名函数。这很重要,因为它允许您提供函数的部分参数,有效地创建一个新函数(称为部分应用程序)。

在下面的示例中,我使用+作为函数(操作符周围的括号将其转换为正常函数),以创建增量函数。并将其应用于之前的f函数。

let incr = (+) 1
f incr

代码评估为f incr = incr(10) + 10 = 21

link有关于应用于OCaml的主题的更多信息。