Как я могу преобразовать 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 отсутствует параметр: список ключей, используемых для построения вашей карты.

StringMap.bindings вернет список (key, value) пар.

Другие вопросы по тегам