Browse thread
[Caml-list] Hashtbl.hash and Hashtbl.hash_param
-
sebastien FURIC
-
sebastien FURIC
- Florian Douetteau
- Xavier Leroy
-
sebastien FURIC
[
Home
]
[ Index:
by date
|
by threads
]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: | 2002-08-23 (16:27) |
From: | Florian Douetteau <douet@c...> |
Subject: | Re: [Caml-list] Hashtbl.hash and Hashtbl.hash_param |
On Fri, 23 Aug 2002, sebastien FURIC wrote: After a quick inspection in the source byterun/hash.c, it appears that hash_param C implementation decrements a C static variable 'counter' whenever an object is considered and returns 0 whenever this counter reach 0 (that's a way to handle cycles). As a consequence (..details omitted..), in the case of the list type, if the length of your list is greater that the initial value of the counter, hash will always return 0. A quick fix is to use: hash_param <number_bigger_than_the_length_of_any_list> 100 instead of hash (== hash_param 10 100) By the way, beware that hash_param is not thread-safe, since it uses a C global variable. -- Florian Douetteau > > > sebastien FURIC a écrit : > > > > What kind of algorithm is used to compute the hash code of objects in > > O'Caml ? > > > > Hashtbl.hash (List.map (fun x -> Random.int 100) > > [1;2;3;4;5;6;7;8;9;10]);; > > always returns 0 (Hashtbl.hash_param has the same properties) which is > > a poor result ! > > > > What can I do if I don't know the size of the list in advance ? > > Of course, I know I could use functors to specify my own hash function. > While prototyping I just would prefer an acceptable Hashtbl.hash > function to avoid writing "boring" code. > > Sebastien. > ------------------- > To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr > Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ > Beginner's list: http://groups.yahoo.com/group/ocaml_beginners > ------------------- To unsubscribe, mail caml-list-request@inria.fr Archives: http://caml.inria.fr Bug reports: http://caml.inria.fr/bin/caml-bugs FAQ: http://caml.inria.fr/FAQ/ Beginner's list: http://groups.yahoo.com/group/ocaml_beginners