Compiler errors OCaml类型声明和大写字母

Compiler errors OCaml类型声明和大写字母,compiler-errors,ocaml,Compiler Errors,Ocaml,在windows环境中使用ocamlc: type splitter = {varname:string; count:int; mean:float} 在编译源代码时工作正常,但: type splitter = {Varname:string; count:int; mean:float} 导致编译器抱怨(没有提供太多信息) 同时,第二行使用OCaml工作得非常好。这种行为有充分的理由吗?我没有在网上找到任何东西。传统上,FP语言将大写标识符的使用限制在某些情况下。这使得代码更具可读性,

在windows环境中使用ocamlc:

type splitter = {varname:string; count:int; mean:float}
在编译源代码时工作正常,但:

type splitter = {Varname:string; count:int; mean:float}
导致编译器抱怨(没有提供太多信息)


同时,第二行使用OCaml工作得非常好。这种行为有充分的理由吗?我没有在网上找到任何东西。

传统上,FP语言将大写标识符的使用限制在某些情况下。这使得代码更具可读性,并且实际上强制了某种编码风格。考虑到FP语言传统上不仅有丰富的表达式子语言,而且还有丰富的类型子语言,这也使得解析更容易(我假设)

因此,在OCaml中,不能对记录的字段使用大写名称


要在文档中找到这一点,可以从中记录语法的定义开始,然后观察字段名是中的小写标识。

这是有原因的。OCaml使用许多不同的名称空间,但在某些情况下,其中两个名称空间需要区分。然后,其中一个是纯大写的,另一个是纯小写的。在手头的情况下,考虑表达式<代码> A.B.C.<代码>和<代码> A.B.C.<代码>。前者是记录的字段c,后者又是记录a的字段。后者是记录a的字段c,但(相应的记录类型定义和)字段名c来自模块B。 如果OCaml允许使用混合大小写记录名称,则无法在语法上区分这两个表达式,因此点运算符不能同时用于记录字段和模块部件。然后,将需要两个不同的运算符,这使得语法更加繁琐

File "splitter.ml", line 1, characters 17-24:
Error: Syntax error