Domanda
Vorrei creare una tabella di ricerca in OCaml. La tabella avrà 7000+ voci che, sulla ricerca (da int), restituiscono una stringa. Che cosa è una struttura di dati appropriato da utilizzare per questo compito? Se la tabella di essere esternalizzato dal codice di base e se sì, come si fa a "tra cui" la tabella di ricerca per essere accessibile dalla sua / il suo programma?
Grazie.
Soluzione
Se le stringhe sono affrontati utilizzando numeri interi consecutivi è possibile utilizzare una matrice.
In caso contrario, è possibile utilizzare una tabella hash (non funzionante), o di una mappa (funzionale). Per iniziare con la mappa try:
module Int =
struct
type t = int
let compare = compare
end ;;
module IntMap = Map.Make(Int) ;;
Se la tabella è troppo grande per memorizzare nella memoria, è possibile memorizzare in un database esterno e usare attacchi a dbm , BdB, SQLite , ...
Altri suggerimenti
let table : (int,string) Hashtbl.t = Hashtbl.create 8192
Per memorizzare la tabella in un file separato (per esempio come un array), è sufficiente creare un file strings.ml
con il contenuto:
let tbl = [|
"String 0";
"String 1";
"String 2";
...7000 more...
|]
Compila questo con:
ocamlc -c strings.ml
Come spiegato nel manuale , questo definisce un modulo Strings
che altri moduli ocaml possono fare riferimento. Ad esempio, è possibile avviare una toplevel:
ocaml strings.cmo
E occhiata una stringa accedendo una posizione particolare nella matrice:
Strings.tbl.(1234) ;;