Je suppose que l'idée est de créer des chaînes de mappage de table aux entiers. Alors vous voulez écrire son type comme (string, int) hash_table
(le type hash_table
est un type avec deux paramètres, qui sont écrits comme celui dans ML).
Mais vous avez également besoin d'une fonction de hachage hash : string -> word
et une fonction d'égalité eq : string * string -> bool
sur des chaînes à fournir à mkTable
. Pour ce dernier, vous pouvez simplement utiliser op=
, pour le premier que vous pouvez utiliser HashString.hashString
du module respectif.
Alors,
val ht : (string, int) HashTable.hash_table = HashTable.mkTable(HashString.hashString, op=)(17, Domain)
devrait marcher.
Je dois cependant noter que les tableaux de hachage ont tendance à être largement surutilisés, et le plus souvent, ils sont la mauvaise structure de données. Cela est particulièrement vrai dans la programmation fonctionnelle, car ils sont une structure de données avec état. Habituellement, vous êtes mieux (et potentiellement encore plus efficace) en utilisant une carte basée sur des arbres, par exemple, le RedBlackMapFn
de la bibliothèque SML / NJ.