#### 12.8.5 Set operators

The following operations on sets can be performed with operators: union, difference, symmetric difference, inclusion and intersection. Elements can be added or removed from the set with the Include or Exclude operators. The operators needed for this are listed in table (12.6).

Table 12.6: Set operators

 Operator Action + Union - Difference * Intersection >< Symmetric difference <= Contains include include an element in the set exclude exclude an element from the set in check wether an element is in a set

The set type of the operands must be the same, or an error will be generated by the compiler.

The following program gives some valid examples of set operations:

Type
Day = (mon,tue,wed,thu,fri,sat,sun);
Days = set of Day;

Procedure PrintDays(W : Days);
Const
DayNames : array [Day] of String[3]
= (’mon’,’tue’,’wed’,’thu’,
’fri’,’sat’,’sun’);
Var
D : Day;
S : String;
begin
S:=’’;
For D:=Mon to Sun do
if D in W then
begin
If (S<>’’) then S:=S+’,’;
S:=S+DayNames[D];
end;
Writeln(’[’,S,’]’);
end;

Var
W : Days;

begin
W:=[mon,tue]+[wed,thu,fri]; // equals [mon,tue,wed,thu,fri]
PrintDays(W);
W:=[mon,tue,wed]-[wed];     // equals [mon,tue]
PrintDays(W);
W:=[mon,tue,wed]-[wed,thu];     // also equals [mon,tue]
PrintDays(W);
W:=[mon,tue,wed]*[wed,thu,fri]; // equals [wed]
PrintDays(W);
W:=[mon,tue,wed]><[wed,thu,fri]; // equals [mon,tue,thu,fri]
PrintDays(W);
end.

As can be seen, the union is equivalent to a binary OR, while the intersection is equivalent to a binary AND, and the summetric difference equals a XOR operation.

The Include and Exclude operations are equivalent to a union or a difference with a set of 1 element. Thus,

Include(W,wed);

is equivalent to

W:=W+[wed];

and

Exclude(W,wed);

is equivalent to

W:=W-[wed];

The In operation results in a True if the left operand (an element) is included of the right operand (a set), the result will be False otherwise.