30 lines
1.0 KiB
Ada
30 lines
1.0 KiB
Ada
with ada.containers.ordered_sets, ada.text_io;
|
|
use ada.text_io;
|
|
|
|
procedure set_demo is
|
|
package cs is new ada.containers.ordered_sets (character); use cs;
|
|
|
|
function "+" (s : string) return set is
|
|
(if s = "" then empty_set else Union(+ s(s'first..s'last - 1), To_Set (s(s'last))));
|
|
|
|
function "-" (s : Set) return string is
|
|
(if s = empty_set then "" else - (s - To_Set (s.last_element)) & s.last_element);
|
|
s1, s2 : set;
|
|
begin
|
|
loop
|
|
put ("s1= ");
|
|
s1 := + get_line;
|
|
exit when s1 = +"Quit!";
|
|
put ("s2= ");
|
|
s2 := + get_line;
|
|
Put_Line("Sets [" & (-s1) & "], [" & (-s2) & "] of size"
|
|
& S1.Length'img & " and" & s2.Length'img & ".");
|
|
Put_Line("Intersection: [" & (-(Intersection(S1, S2))) & "],");
|
|
Put_Line("Union: [" & (-(Union(s1, s2))) & "],");
|
|
Put_Line("Difference: [" & (-(Difference(s1, s2))) & "],");
|
|
Put_Line("Symmetric Diff: [" & (-(s1 xor s2)) & "],");
|
|
Put_Line("Subset: " & Boolean'Image(s1.Is_Subset(s2))
|
|
& ", Equal: " & Boolean'Image(s1 = s2) & ".");
|
|
end loop;
|
|
end set_demo;
|