Version française
Home     About     Download     Resources     Contact us    
Browse thread
[Caml-list] Hashtbl.hash and Hashtbl.hash_param
[ Home ] [ Index: by date | by threads ]
[ Search: ]

[ Message by date: previous | next ] [ Message in thread: previous | next ] [ Thread: previous | next ]
Date: -- (:)
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