2017-03-05 9 views
2

私は、この宣言以下この宣言OCamlの型の明確化(初心者)

type 'a dict = string -> 'a option 
val empty : unit -> 'a dict 
val insert : 'a dict -> string * 'a -> 'a dict 

を持って、どのように私はemptyを書き込むことができますか? empty()は空の辞書を返します。

+0

これは宿題のためのとても楽しい質問です。私はかなり嫉妬しています。 – Yawar

答えて

2

私はあなた自身のために物事を把握する部分を短絡させたくありません。ここにヒントがあります。

  1. 辞書のタイプはstring -> 'a optionです。つまり、文字列が辞書の値に関連付けられていない場合は、辞書内で探しているものを返す関数、またはNoneを返す関数です。空の辞書のように、文字列が何も関連付けられていないので、関数は常に同じ結果を返します。常に同じことを返す関数を書くのはそれほど難しいことではありません。

  2. あなたのコードは(タイプ'aの)値を返していますが、タイプ'a optionの何かを返すことになっています。そうでなければそれは素晴らしいコードです、あなたはそれのポイント(IMHO)をつかんでいます。