OCaml函数类型('a - >'b) - > 'a - > “b

时间:2014-02-02 11:50:52

标签: ocaml

我在理解这种类型的功能如何工作方面遇到了一些问题。

let try_it f x = f x;;
val try_it : ('a -> 'b) -> 'a -> 'b = <fun>

上面的函数try_it接受一个函数f,它接受一个多态参数并返回一个多态类型。现在我可以轻松地将函数+参数传递给不同数量的参数的try_it,如下所示,它可以工作。

let add_three a b c = a + b + c;;

let add_two a b = a + b;;

let try_it f x = f x;;

print_endline(string_of_int(try_it add_two 23 45));;
print_endline(string_of_int(try_it add_three 23 4 56));;

现在如果以上工作,为什么我不能创建一个名为try_it2的函数,它定义如下,并以相反的顺序传递相同的函数和参数?

let try_it2 x f = f x;;
val tryit2 : 'a -> ('a -> 'b) -> 'b = <fun>

对我来说try_it2与try_it相同,只是参数顺序改变但我显然在这里遗漏了一些东西。有人可以 请把我放在正确的道路上?

1 个答案:

答案 0 :(得分:4)

真正的问题是你的try_it函数的参数数量是固定的。

你必须正确理解这一行所发生的事情:

print_endline(string_of_int(try_it add_two 23 45));;

try_it add_two 23返回int类型的函数 - &gt; int,反过来评估值45,给出23 + 45。

但是如果你改变了try_it的定义,那么这一行就变成了:

print_endline(string_of_int(try_it 23 add_two 45));;

这样try_it 23 add_two返回一个(int - &gt; int)函数,计算结果超过45。

度过美好的一天!