2016-08-17 6 views
0

:引数のOCamlの引数名

ラベルしばしば それらのための変数名と同じです。 OCamlは、この場合の略語を提供します。以下は 同等:

let f ~name1:name2 ~name2:name2 = name1+name2 
let f ~name1 ~name2 = name1 + name2 

は私が

Error: Unbound value name1 
Hint: Did you mean name2? 

私は最初の行ではない場合、彼らは同等だか理解していない、私はこのエラーを取得する最初の行に置きます有効な関数です。

+6

最初の行の '= 'のRHSにある変数' name1'は定義されていません。これは〜name1:name2のtypoだと思います。最初の行はf〜name1にする必要があります:name1〜name2:name2 = name1 + name2 –

+1

これはhttp://www.cs.cornell.edu/courses/cs3110/2015fa/l/02-fun/rec.htmlからです。このコースを受講している場合は、TAに依頼して修正する必要があります。 – camlspotter

+3

@TrungTaあなたはコメントではなく答えとして投稿するべきです。 – dcorking

答えて

0

syntax of function argumentsでは、異なる表現が可能です。

機能fに評価される式exprは、次の構文は、次の規則で許可されて与えられる:

  • expr arg(式がarg所与):値vargを評価します。 fはいくつかのタイプabためlbl:a -> b型を持つ場合にのみ、結果は、引数で評価f ~lblの値である:結果は(lbl名前値を与えられる)引数v

  • expr ~lblで評価fの値でありますa;またはfのタイプが?lbl:a -> bの場合(lblの場合はタイプチェックの場合はaとする必要があります)。 (式arg所与)

  • expr ~lbl:arg

    :これは(exprargの評価順序は未定義であることを除いて)let lbl = arg in exp ~lblと同じものです。

  • expr ?lbllbl名前値を与えられる):いくつかのタイプabため?lbl:a -> b型を持つ場合にのみf、結果は、引数aで評価f ~lblの値です。 lblはタイプチェックのためにタイプa optionである必要があります。これは主に、オプションの引数をある関数から別の関数に転送するときに表示されます。 (式arg所与)

  • expr ?lbl:arg

    :これは(exprargの評価順序は未定義であることを除いて)let lbl = arg in exp ?lblと同じものです。

関連する問題