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
(我希望这不会太令人困惑。),