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).
|>=||Left hand side set is a superset of the one on the right|
|include||include an element in the set|
|exclude||exclude an element from the set|
|in||check whether 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 = ('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; Const WorkWeek = [mon,tue,wed,thu,fri]; WeekEnd = [sat,sun]; 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); if [mon,tue]<=WorkWeek then Writeln('Must work on monday and tuesday'); if Weekend>=[sun] then Writeln('Can rest on sunday'); end.
As can be seen, the union is equivalent to a binary OR, while the intersection is equivalent to a binary AND, and the symmetric difference equals a XOR operation.
The Include and Exclude operations are equivalent to a union or a difference with a set of one element. Thus,
is equivalent to
is equivalent to
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.