type t = (string*int) list array let hash w s = let h = ref 0 in for i = String.length s - 1 downto 0 do h := (19 * !h + Char.code s.[i]) mod w done; !h (* ou avec une fonction récursive *) let hash w s = let n = String.length s in let rec loop i = if i = n then 0 else (19 * loop (succ i) + Char.code s.[i]) mod w in loop 0 (* ou enfin avec une fonction récursive terminale *) let hash w s = let rec loop acc i = if i = -1 then acc else loop ((19 * acc + Char.code s.[i]) mod w) (i - 1) in loop 0 (String.length s - 1) let nouveau size = Array.make size [] let trouve t s = List.assoc s t.(hash (Array.length t) s) let ajoute t (s,e) = let h = hash (Array.length t) s in t.(h) <- (s,e)::t.(h)