reasonml - Mapa OCaml de teclas int:: ¿dónde está el módulo int ''simple'' para usar con el functor Map.Make?
ocaml online (4)
Necesito un mapa OCaml con claves de tipo int, así que estoy usando Map.Make para crear uno. Sin embargo, parece que los módulos estándar ''solo'' proporcionan módulos como Big_int , Int32 , Int64 y Nativeint que requieren conversiones. Así que tengo que hacer cosas como:
module IntMap = Map.Make(Int32)
let a_map = IntMap.add (Int32.of_int 0) "zero" IntMap.empty ;;
... que preferiría evitar o definir mi propio módulo de Int tonto, tratar con literales o valores int simples sin requerir funciones de conversión:
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 ;;
¿Me estoy perdiendo algo obvio aquí?
La forma más sencilla de tener un mapa int es hacer lo siguiente:
module IntMap = Map.Make(struct type t = int let compare = compare end)
No creo que te estés perdiendo nada, no hay un módulo estándar para esto. Creo que el módulo BatInt de OCaml Batteries Included hace lo que usted desea.
(Editado para agregar: es verdad, ¡yo mismo uso el método sugerido por Thomas!)
Puedes construir IntMap
share . Si no le importa usar bibliotecas de terceros, la biblioteca de árboles Patricia ( Ptmap
) de Jean-Christophe Filliâtre es un poco más eficiente (y de manera similar Ptset
para conjuntos de enteros OCaml).
Si ya usa containers
(lo cual creo que es un poco más común desde que se escribieron las respuestas anteriores), puede usar los módulos "primitivos" de los contenedores junto con el módulo CCMap para lograr esto, por ejemplo:
module ByInt = CCMap.Make(CCInt)