Commit 6e618918 authored by Thorsten Wißmann's avatar Thorsten Wißmann 🐧
Browse files

Do not throw all CL coalitions in one bset

As ocaml is not purely functional, the following code snippets have
different semantics:

    List.map (List.fold_left tmpf (bsetMakeRealEmpty ()))
             (List.map S.elements intlist)

vs

    List.map (fun x -> List.fold_left tmpf (bsetMakeRealEmpty ()) x)
             (List.map S.elements intlist)

The former code calls bsetMakeRealEmpty only once, but the latter calls
ot for each element of the list returned by the (map ... intlist).

Because of this, all coalitions were merged into one big set, i.e.
there always was only one coalition: the union of all maximal disjoint
sets. This of course triggered bad behaviour, which is fixed now by this
commit.

The code is unreadable anyway and will be improved a lot by the
following commit.

This closes #13
parent 77a804ab
......@@ -94,7 +94,7 @@ let maxDisjoints sort (a: bset) : bset list =
let tmpf : bset -> int -> bset =
(fun bs f -> bsetAdd bs (lfFromInt f) ; bs)
in
List.map (List.fold_left tmpf (bsetMakeRealEmpty ()))
List.map (fun x -> List.fold_left tmpf (bsetMakeRealEmpty ()) x)
(List.map S.elements intlist)
let string_of_coalition sort bs =
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment