Ocaml的类型推断
我是Ocaml的新手。我班上有一个问题: 设f a b c d e=e(如果e.(1),则a b否则b d)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可以
我们被要求推断“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类型