Ocaml的类型推断

Ocaml的类型推断,ocaml,type-inference,Ocaml,Type Inference,我是Ocaml的新手。我班上有一个问题: 设f a b c d e=e(如果e.(1),则a b否则b d) 我们被要求推断“a”的类型。我认为它是一个int,因为这个if操作应该返回一个int作为e数组的索引。但我的答案是错误的。有人能帮我分析一下吗?多谢各位 if的值为ab或bd。由于表达式ab必须返回int(如您所说),a必须是一个接受一个参数并返回int的函数。因此a不是int而是一个函数 a的参数类型也是a类型的一部分。要确定此类型,请注意b也是一个返回int的函数(从子表达式bd可以

我是Ocaml的新手。我班上有一个问题:

设f a b c d e=e(如果e.(1),则a b否则b d)


我们被要求推断“a”的类型。我认为它是一个int,因为这个if操作应该返回一个int作为e数组的索引。但我的答案是错误的。有人能帮我分析一下吗?多谢各位

if的
值为
ab
bd
。由于表达式
ab
必须返回int(如您所说),
a
必须是一个接受一个参数并返回int的函数。因此
a
不是int而是一个函数

a
的参数类型也是
a
类型的一部分。要确定此类型,请注意
b
也是一个返回int的函数(从子表达式
bd
可以看出)。因此,
a
是一个函数,它接受一个参数,这个参数是一个函数,返回int。由于代码中没有任何东西限制
d
的类型,
b
可以是任何接受一个参数并返回int的函数。让我们调用b的参数类型
't
。请注意,对于对
f
的不同调用,此类型可能不同。因此
a
的类型是
('t->int)->int
,其中
b
的对应类型是
't->int
,而
d
的类型是
't


这一切都相当复杂。你的抄本可能有错。或者,也许可以做一个复杂的例子:-)

Jeffrey,如果我把“then a b”改为“then abc”,它会把“a”改为一个函数,它接受两个参数并返回一个int吗?或者它应该被视为“a”仍然以b为参数,而c是b的参数?
ABC
的含义是
a
采用两个参数。如果希望
c
成为
b
的参数,则必须编写
a(bc)
。但是关于函数和参数还有很多要说的。您也许应该看看OCaml教程。(例如,查找Currying和partial application。)注意,如果您想检查这类问题的答案,可以快速启动utop并在其中键入表达式,然后观察ocaml类型