집합 연산자
집합 연산자
집합에 대해서는 연산자로 합집합, 차집합, 대칭 차집합, 포함 여부, 교집합 같은 연산을 할 수 있어요. 요소를 집합에 넣거나 빼는 건 Include 또는 Exclude 연산자로 해요. 이에 필요한 연산자들은 표 12.6에 나와 있어요.
출처: 문서
본문
표 12.6: 집합 연산자
| 연산자 | 동작 |
|---|---|
+ |
합집합 |
- |
차집합 |
* |
교집합 |
>< |
대칭 차집합 |
<= |
포함 여부 |
>= |
왼쪽 집합이 오른쪽 집합의 상위집합인지 |
include |
집합에 요소 하나 포함 |
exclude |
집합에서 요소 하나 제외 |
in |
요소가 집합에 속하는지 검사 |
피연산자의 집합 타입은 서로 같아야 해요. 다르면 컴파일러가 오류를 내요.
집합 연산의 유효한 예시 몇 개를 볼게요.
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;
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.
코드를 보면 알 수 있겠지만, 합집합은 이진 OR, 교집합은 이진 AND, 대칭 차집합은 XOR 연산과 각각 대응돼요.
Include와 Exclude 연산은 요소 하나짜리 집합과의 합집합, 차집합과 동일해요. 즉,
Include(W,wed);
는 다음 코드와 동일하고,
W:=W+[wed];
Exclude(W,wed);
는 다음 코드와 동일해요.
W:=W-[wed];
in 연산은 왼쪽 피연산자(요소)가 오른쪽 피연산자(집합)에 포함되면 True, 그렇지 않으면 False를 돌려줘요.