2016-09-03 11 views
2

:私はソースをコンパイルしたときOCamlの型宣言と資本手紙

type splitter = {varname:string; count:int; mean:float} 

がうまく働いたが:

type splitter = {Varname:string; count:int; mean:float} 

は、コンパイラはあまりを与えることなく(文句を引き起こしました情報)

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

2番目の行はOCamlと完全に連携していました。この行動の正当な理由はありますか?私はオンラインで何かを見つけませんでした。

答えて

3

伝統的にFP言語は、大文字の識別子の使用を特定のケースに限定しています。これにより、コードが読みやすくなり、実際には特定のコーディングスタイルが適用されます。また、FP言語は伝統的に豊富な表現のサブ言語だけでなく、豊富なタイプのサブ言語も持っているので、解析が容易になります(私は仮定します)。

したがって、OCamlのレコードのフィールドに大文字の名前を使用することはできません。ドキュメントでこれを見つけるために

、あなたはその後、フィールド名小文字-identのSection 6.3であることを確認し、Section 6.8でレコード構文の定義を開始することができます。

2

理由があります。 OCamlはいくつかの異なる名前空間を使いますが、場合によっては2つを区別する必要があります。これは、一方が純粋に大文字で、他方が純粋に小文字で行われます。手元にある場合は、式a.b.ca.B.cを考えてみましょう。前者は記録のフィールドcであり、これは記録aのフィールドである。後者はレコードaのフィールドcですが、それぞれのレコードタイプ定義とフィールド名cはモジュールBから来ます。 OCamlで大文字と小文字の混在したレコード名を使用できる場合、2つの式を構文的に区別できないため、ドット演算子はレコードフィールドとモジュールパーツの両方に使用できませんでした。すると、2つの異なる演算子が必要になり、構文が煩雑になります。