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

Ocaml 如何将参数传递给将这些参数传递给用作参数的其他函数的函数,ocaml,Ocaml,我知道这个标题很让人困惑,但也许这个描述会让人明白 我正在编写一个函数,它将相同的函数应用于自身的结果 let add1 x = x + 1 let twice f x = (f (f x)) 现在我想使用add1和两次编写add2,所以我这样做了 let add2 = twice add1 let%test "Testing add2..." = Int.(=) 1337 (add2 1335) 测试通过了,但我想既然我们用add2传递int值,那么在add2的函数签名中应该有另一

我知道这个标题很让人困惑,但也许这个描述会让人明白

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

let add1 x = x + 1

let twice f x = (f (f x))
现在我想使用
add1
两次编写
add2
,所以我这样做了

let add2 = twice add1

let%test "Testing add2..." =
  Int.(=) 1337 (add2 1335)
测试通过了,但我想既然我们用
add2
传递int值,那么在
add2
的函数签名中应该有另一个参数,并传递给
add1

所以我写了这个

let add2 x = twice add1 x

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

他们都是正确的,他们的意思都一样。 编写示例的第三种方法是:

let add2=fun x->tweep add1 x
ocaml是一种函数式编程语言,因此它允许您返回一个函数作为另一个函数的结果。 让我们考虑一下

让我们加上xy=x+y
add
的类型是
int->int->int
,它实际上是
int->(int->int)
,是一个以整数为参数并返回整数函数的函数。 因此,您可以按如下方式编写
add1

让add1=add1
我们将
int->(int->int)
类型的
add
应用于
1:int
,因此
add1
具有类型
int->int
,并对应于取
x
并返回
1+x
的函数。 当您将
add
应用于两个参数
x
y
——即
addxy
——您实际上是在编写
(添加x)y

最后,您操作函数,函数
f
是将
fx
关联到
x
的函数,或者换句话说
funx->fx

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