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.

È stato utile?

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) ;;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top