Ответ 1
Самый простой способ иметь внутреннюю карту - сделать следующее:
module IntMap = Map.Make(struct type t = int let compare = compare end)
Мне нужна карта OCaml с ключами типа int, поэтому я использую Map.Make для ее создания. Однако кажется, что только стандартные модули предоставляют только такие модули, как Big_int, Int32, Int64 и Nativeint, которые требуют конверсий. Поэтому я должен делать такие вещи, как:
module IntMap = Map.Make(Int32)
let a_map = IntMap.add (Int32.of_int 0) "zero" IntMap.empty ;;
..., который я бы предпочел избежать или определить свой собственный глупый модуль Int, имеет дело с простыми буквами или значениями без использования функций преобразования:
module Int = struct
type t = int
let compare x y = if x < y then -1 else if x > y then 1 else 0 end ;;
module IntMap = Map.Make(Int)
let a_map = IntMap.add 0 "zero" IntMap.empty ;;
Я пропустил что-то очевидное здесь?
Самый простой способ иметь внутреннюю карту - сделать следующее:
module IntMap = Map.Make(struct type t = int let compare = compare end)
Я не думаю, что вам что-то не хватает, нет стандартного модуля для этого. Я считаю, что BatInt модуль Аккумуляторы OCaml включены делает то, что вы хотите.
(Отредактировано для добавления: это правда, я сам использую метод, предложенный Томасом!)
Вы можете построить IntMap
с помощью одного слоя. Если вы не возражаете против использования сторонних библиотек, Джин-Кристоф Филлиатри Патрикская древесная библиотека (Ptmap
) немного более эффективна ( и аналогично Ptset
для множеств целых чисел OCaml).