为什么OCaml编译器会给出关于类型推断的错误消息?

为什么OCaml编译器会给出关于类型推断的错误消息?,ocaml,Ocaml,我用OCaml编写了这个助手函数,它不断抛出这个错误 代码: 我需要有'a*int选项的类型,根据我的说法,它看起来还可以。我是OCaml的新手,任何帮助都将不胜感激 这是学习OCaml时常见的问题。你是在假设 f x+1 口译员是谁 f (x+1) 而实际上它意味着, (f x) + 1 更正式地说,在OCaml中,函数应用运算符(表示为函数名及其参数的并置)具有比中缀运算符(例如,+,-,*)更高的优先级,在之前进行计算 现在错误消息有了明确的解释,因为您 helper1 f t d

我用OCaml编写了这个助手函数,它不断抛出这个错误

代码:


我需要有'a*int选项的类型,根据我的说法,它看起来还可以。我是OCaml的新手,任何帮助都将不胜感激

这是学习OCaml时常见的问题。你是在假设

f x+1
口译员是谁

f (x+1)
而实际上它意味着,

(f x) + 1
更正式地说,在OCaml中,函数应用运算符(表示为函数名及其参数的并置)具有比中缀运算符(例如,+,-,*)更高的优先级,在之前进行计算

现在错误消息有了明确的解释,因为您

helper1 f t d + 1

编译器看到您将某个helper1 f t d添加到1中,并推断该对象应具有int类型。另一方面,从helper1的其他实例中,它还推断该对象具有type“a*int”选项,该选项显然不是int。因此它指示错误。

这是学习OCaml时的常见问题。你是在假设

f x+1
口译员是谁

f (x+1)
而实际上它意味着,

(f x) + 1
更正式地说,在OCaml中,函数应用运算符(表示为函数名及其参数的并置)具有比中缀运算符(例如,+,-,*)更高的优先级,在之前进行计算

现在错误消息有了明确的解释,因为您

helper1 f t d + 1

编译器看到您将某个helper1 f t d添加到1中,并推断该对象应具有int类型。另一方面,从helper1的其他实例中,它还推断该对象具有type“a*int”选项,该选项显然不是int。因此它指示错误。

似乎缺少一对括号→ 助手1 f t d+1;;另外,请注意,您的问题不是独立的helper2函数没有定义似乎缺少一对括号→ 助手1 f t d+1;;另外,请注意,您的问题不是独立的,helper2函数没有定义