Supongo que la idea es crear una cadena de mapeo de mesa a enteros. Entonces quieres escribir su tipo como (string, int) hash_table
(el tipo hash_table
es un tipo con dos parámetros, que se escriben así en ML).
Pero también necesitas una función hash hash : string -> word
y una función de igualdad eq : string * string -> bool
sobre cuerdas para proporcionar a mkTable
. Para este último, simplemente puedes usar op=
, para el primero que puedes usar HashString.hashString
del módulo respectivo.
Asi que,
val ht : (string, int) HashTable.hash_table = HashTable.mkTable(HashString.hashString, op=)(17, Domain)
Deberia trabajar.
Sin embargo, debo señalar que las tablas hash tienden a ser muy utilizadas en exceso, y la mayoría de las veces son la estructura de datos incorrecta. Esto es especialmente cierto en la programación funcional, ya que son una estructura de datos con estado. Por lo general, está mejor (y potencialmente aún más eficiente) utilizando algún mapa basado en árboles, por ejemplo, el RedBlackMapFn
de la biblioteca SML/NJ.