(* modul pentru multimi de tip string sau char putem crea direct *) module S = Set.Make(String) (* multimi mici formam direct cu elementele *) let m1 = S.add "ana" (S.add "are" (S.singleton "mere")) ;; (* putem afla cardinalul multimii *) S.cardinal m1 ;; (* testam daca un element e in multime *) S.mem "ana" m1;; S.mem "lia" m1;; (* cream alta multime *) let m2 = S.add "si" (S.singleton "rosii") ;; (* facem reuniunea *) S.union m1 m2 ;; (* multimea nu e afisata direct de interpretor *) (* obtinem lista elementelor *) S.elements m2;; S.elements m1;; (* sunt la fel ca inainte, reuniunea nu le modifica, ci creează altă mulțime *) S.elements (S.union m1 m2);; (* sau putem sa o parcurgem tiparind elementele *) open Printf let print_strset s = print_char '{'; S.iter (printf " %s") s; print_endline " }" ;; print_strset m1;; (* putem calcula o valoare din toate elementele *) (* functia pentru fold are doi parametri, elementul si rezultatul partial *) let lungtot s = S.fold (fun e acc -> (String.length e) + acc) s 0 ;; lungtot m1;; (* putem selecta anumite elemente *) let m3 = S.filter (fun e -> String.length e = 3) m1 ;; S.elements m3;; (* cineva a vrut sa facem din multime mai multe multimi cu cate un element * le punem intr-o lista *) let sglist m = S.fold (fun e acc -> S.singleton e :: acc) m [] ;; let l1 = sglist m1;; (* e o lista de multimi, interpretorul nu afiseaza elementele *) (* putem verifica faptul ca toate multimile au un element *) List.for_all (fun e -> S.cardinal e = 1) l1;; (* putem parcurge lista si tipari un element (singurul) din multime *) List.iter (fun e -> printf "%s " (S.choose e)) l1;; (* S.fold a parcurs multimea si a adaugat elementele in ordine, * deci primul a ajuns la coada listei l1 *) (* o alta multime cu aceleasi trei siruri *) let m0 = S.add "ana" (S.add "mere" (S.singleton "are"));; if m0 <> m1 then print_endline "NU folositi = pentru a compara multimi!!!";; (* multimile NU se compara cu =, poate sa difere reprezentarea interna in functie de ordinea de adaugare a elementelor *) if S.equal m1 m0 then print_endline "folositi S.equal: totusi ele sunt egale";; (* trebuie sa le comparam cu S.equal *)
This document was generated using caml2html