module S = Set.Make(String) (* pentru multimi de siruri *) module PS = Set.Make(S) (* multimi de multimi de siruri *) (* daca ss = {m1, m2, ... mn} multime de multimi * parcurge ss și adaugă mulțimile {e} U m1, {e} U m2, ... , {e} U mn *) let addelem e ss = PS.fold (fun s acc -> PS.add (S.add e s) acc) ss ss (* let addelem e ss = PS.fold (fun s -> s |> S.add e |> PS.add) ss ss *) (* parcurge s și aplică pasul de mai sus cu fiecare element, pornind de la * mulțimea cu 1 element { {} }; fiecare pas va dubla numărul de multimi *) let powset s = S.fold addelem s (PS.singleton S.empty) let test = S.of_list ["1";"2";"3"] |> powset |> PS.elements |> List.map S.elements
This document was generated using caml2html