2014-07-18 6 views
1

저는 OCaml을 처음 접했고 OCaml에서 StringMap을 List로 변환하려고합니다.OCaml에서 StringMap을 List로 변환하려면 어떻게해야합니까?

지도는 이전에 목록에서 생성되었습니다.

let map = List.fold_left(<SOME CODE HERE, WHICH I AM OMITTING> 
    ) StringMap.empty 
    in StringMap.fold(fun w c newlist -> (c,w)::newlist) map[] 

코드의 마지막 줄 위에서 나에게 다음과 같은 오류 제공 : 이 표현은 StringMap.key 목록을 입력있다을 -> INT StringMap.t 하지만식이 유형 '는 StringMap.t의 예상 = 'a Map.Make (String) .t

참고 :이 코드는 ocamllex 파일 (.mll)에 입력되며 생성 된 어휘 분석기 (.ml) 파일을 실행하려고하면이 오류가 발생합니다.

왜이 오류가 발생합니까? 코드를 작동 시키려면 어떻게해야합니까?

감사합니다.

답변

1

값의 유형이 StringMap.key list -> int StringMap.t 인 오류가 발생했습니다. 이는 예상 한대로 기능이 아니라 맵임을 의미합니다. 또한, 함수 서명하면 예상대로 int StringMap.t를 얻기 위해 이전의 표현에서 누락 된 것을 알려줍니다 : 당신은 내가 가정 유형 StringMap.key list,의, List.fold_left에 호출에 매개 변수를 추가해야하는 것은 string list입니다 :

let map = List.fold_left(<SOME CODE HERE, WHICH I AM OMITTING> 
) StringMap.empty string_list 

여기서 string_list은 누락 된 매개 변수입니다.지도를 작성하는 데 사용되는 키 목록입니다.

1

StringMap.bindings(key, value) 쌍의 목록을 반환합니다.