Suponho que a idéia é criar uma tabela mapeando strings para inteiros. Então você quer escrever seu tipo como (string, int) hash_table
(o tipo hash_table
é um tipo com dois parâmetros, que são escritos assim em ML).
Mas você também precisa de uma função de hash hash : string -> word
e uma função de igualdade eq : string * string -> bool
sobre cordas para fornecer a mkTable
. Para este último, você pode simplesmente usar op=
, para o primeiro que você pode usar HashString.hashString
Do respectivo módulo.
Então,
val ht : (string, int) HashTable.hash_table = HashTable.mkTable(HashString.hashString, op=)(17, Domain)
Deveria trabalhar.
Devo observar, no entanto, que as tabelas de hash tendem a ser muito usadas e, na maioria das vezes, são a estrutura de dados errados. Isso é especialmente verdadeiro na programação funcional, pois são uma estrutura de dados com estado. Geralmente você está melhor (e potencialmente ainda mais eficiente) usando algum mapa baseado em árvores, por exemplo, o RedBlackMapFn
Na biblioteca SML/NJ.