Как я могу преобразовать StringMap в список в OCaml?
Я очень новичок в OCaml и пытаюсь преобразовать StringMap в список в OCaml.
Карта была сгенерирована из списка ранее.
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 list -> int StringMap.t, но ожидалось выражение типа 'a StringMap.t = 'a Map.Make(String).t
Обратите внимание: этот код вводится в файл ocamllex (.mll), и я получаю эту ошибку, когда пытаюсь выполнить созданный файл лексического анализатора (.ml).
Почему я получаю эту ошибку? Как мне заставить мой код работать?
Спасибо!
2 ответа
Ошибка говорит вам, что map
значение имеет тип StringMap.key list -> int StringMap.t
Это означает, что это функция, а не карта, как вы ожидали. Кроме того, сигнатура функции говорит вам, что отсутствовало в предыдущем выражении, чтобы получить int StringMap.t
как вы и ожидали: вам нужно добавить параметр для вызова List.fold_left
типа StringMap.key list
Я полагаю, string list
:
let map = List.fold_left(<SOME CODE HERE, WHICH I AM OMITTING>
) StringMap.empty string_list
куда string_list
отсутствует параметр: список ключей, используемых для построения вашей карты.