如何将参数传递给将这些参数传递给用作参数的其他函数的函数

时间:2019-07-22 19:59:24

标签: ocaml

我知道标题绝对令人困惑,但是也许此描述会清楚

我正在编写一个将相同功能应用于自身结果的函数

let add1 x = x + 1

let twice f x = (f (f x))

现在,我想使用add2add1来写twice,所以我这样做

let add2 = twice add1

let%test "Testing add2..." =
  Int.(=) 1337 (add2 1335)

和测试通过,但是后来我想,因为我们要通过add2传递int值,所以也许add2的函数签名中应该存在另一个参数,然后将其传递给add1

所以我写了这个

let add2 x = twice add1 x

这也通过了测试,这是正确的测试方法,为什么会发生这种情况?

1 个答案:

答案 0 :(得分:0)

它们都是正确的,而且含义相同。 编写示例的第三种方法是:

let add2 = fun x -> twice add1 x

ocaml是一种函数式编程语言,因此,它允许您将另一个函数的结果返回给一个函数。 让我们考虑

let add x y = x + y

add的类型为int -> int -> int,实际上是int -> (int -> int),它是一个以整数作为参数并返回整数的函数。 因此,您可以这样编写add1

let add1 = add 1

我们将add类型的int -> (int -> int)应用于1 : int,因此add 1的类型为int -> int并对应于采用x并返回{ {1}}。 当您将1 + x应用于两个参数addx(即y)时,您实际上是在写 add x y

最后,您可以操纵函数,而函数(add x) y是将ff x或换句话说x关联的函数。

(我希望这不要太令人困惑。)