1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
module L = BatList
module P = Printf
include BatSet.Int
let to_string s =
let buff = Buffer.create 11 in
Buffer.add_char buff '[';
iter (fun x ->
Buffer.add_string buff
(if Buffer.length buff = 1
then P.sprintf "%d" x
else P.sprintf ";%d" x)
) s;
Buffer.add_char buff ']';
Buffer.contents buff
let of_string s =
assert(MyUtils.string_is_a_list_of_integers s);
let chopped = BatString.chop ~l:1 ~r:1 s in
let int_strings = BatString.split_on_string ~by:";" chopped in
L.fold_left (fun acc int_str ->
add (int_of_string int_str) acc
) empty int_strings
let to_bitv size s =
let res = Bitv.create size false in
iter (fun i -> Bitv.set res i true) s;
res
let sum s =
fold (fun x acc -> x + acc) s 0
let tanimoto a b =
float (cardinal (inter a b)) /.
float (cardinal (union a b))