2016-07-18 10 views
-1

リストから単語のマッピングを作成していますが、この戻り値と以下のエラーが発生しています。手動で追加すると、問題なくMap.findにアクセスできます。このような型エラーのための良いリソースはありますか?OCamlのマップタイプのエラー

# val word_mapping : int DictMap.t list = 
     [<abstr>; <abstr>; <abstr>; <abstr>; <abstr>; <abstr>; <abstr>; <abstr>; 
     <abstr>] 
    # DictMap.find "There" word_mapping;; 
    Error: This expression has type int DictMap.t list 
      but an expression was expected of type 
      'a DictMap.t = 'a Map.Make(String).t 

答えて

1

より良い回答が必要な場合は、コードを公開する必要があります。

タイプミスメッセージではすでに何が問題なのかを説明しています。つまり、int DictMap.tタイプのintの1つのマップを作成するのではなく、int DictMap.t listのint型のMAPSリストを作成しています。あなたのコードは、

List.map (fun (k,v) -> DictMap.add k v DictMap.empty) [("a",1); ("b",2); ... ] 

またはこれと同等のものだと思います。

あなたが代わりにしなければならないことは、たとえば、1つの空DictMap.tから開始し、リストの折りたたみを使用して、それを成長させることである。

List.fold_left (fun dict (k,v) -> DictMap.add k v dict) DictMap.empty [("a",1); ("b",2); ... ]