Legend:
Library
Module
Module type
Parameter
Class
Class type
Library
Module
Module type
Parameter
Class
Class type
Custom hash-table module.
The Hashtbl
module (of the standard library) does not work when keys can contain closures, since they are compared with polymorphic equality (=)
. For memoization though, using a perfect equality test is not important. In other words, it does not really matter if the equality test produces false negatives when comparing closures. We thus use an alternative, polymorphic equality function that behaves as (=)
, but compares closures with using Marshall.to_string
instead of failing.
Representation of a hash table with keys of type 'a
and elements of type 'b
, with a custom equality test.
val create : ?eq_key:('a -> 'a -> bool) -> int -> ('a, 'b) t
create ~eq_key n
creates an empty hash table with initial size n (if n
is not reasonable then a default value is used), and using eq_key
as an equality test for keys. If no eq_key
is given, the function described in the preamble of this module is used.
val add : ('a, 'b) t -> 'a -> 'b -> unit
add htbl k v
extends the hash table htbl
with a new binding of key k
to value v
. Any previous binding for key k
is removed.
val find : ('a, 'b) t -> 'a -> 'b
find htbl k
returns the value maped to k
in the hash table htbl
. The exception Not_found
is raised if there is no such binding.
val iter : ('a -> 'b -> unit) -> ('a, 'b) t -> unit
iter f htbl
calls f k v
for every binding of a key k
to a value v
, in the hash table htbl
. The order of iteration is unspecified.