Tartalom
Az előző fejezetben megvizsgáltuk, hogy milyen lehetőségeink vannak meglevő programokból újak készítésére. A továbbiakban azt fogjuk megvizsgálni, hogyan használhatunk fel meglévő típusokat új típusok létrehozására. Ezeket a módszereket típuskonstrukciós módszereknek, az általuk megkapható típusokat típuskonstrukcióknak nevezzük.
Természetesen sokféle lehetőségünk van meglevő típusból újat csinálni, de mi a továbbiakban csak három speciális típuskonstrukcióval fogunk foglalkozni: a direktszorzattal, az unióval és az iterálttal. Ezeket fogjuk megengedett típuskonstrukcióknak nevezni.
Az első típuskonstrukciós módszer, amivel megismerkedünk a direktszorzat. Legyenek
típusok, és
jelöljük
-nel a nekik megfelelő típusértékhalmazokat, és
-nel
pedig a hozzájuk tartozó elemi típusértékhalmazokat, és vezessük be az
és
jelölést.
8.1. Definíció (DIREKTSZORZAT).
A
típus direktszorzata a
típusoknak, ha
ahol
,
és
A direktszorzat értékhalmazára bevezetjük a
jelölést.
Ha a
leképezés kölcsönösen egyértelmű, akkor a direktszorzatot rekord típusnak
nevezzük. A direktszorzat típusok általában rekordok, de nem mindig. Például
tekintsük a racionális számok halmazának egy lehetséges reprezentációját:
,
:
Egyszerűen látható,
hogy a fent definiált reláció a racionális számok halmazát reprezentálja, de nem kölcsönösen
egyértelmű.
Nagyon fontos továbbá, hogy az új típusértékhalmazt
( ) ne keverjük össze a
közbülső direktszorzattal (
), hiszen egy adott
és
között
nagyon sokféle
leképezés megadható, és az új típus szempontjából egyáltalán nem mindegy,
hogy ezek közül melyiket választjuk.
Tekintsük például a komplex egészek
( alakú számok) halmazát.
Legyen továbbá
, és
A két
közötti különbség elsősorban akkor válik szignifikánssá, ha például a komplex
egészek közötti szorzásműveletet kell implementálnunk a számpárok
szintjén, hiszen ekkor az első és a második komponens értékét az
formula alapján különböző módon kell kiszámítani.
A következő módszer, amivel régi típusokból újakat hozhatunk létre, az unió.
Legyenek
típusok,
és jelölje
a hozzájuk tartozó típusértékhalmazokat, illetve
a
nekik megfelelő elemi típusértékhalmazokat. Vezessük be továbbá az
és
jelöléseket.
8.2. Definíció (UNIó).
Azt mondjuk, hogy a
típus uniója a
,
, …,
típusoknak, ha
ahol
,
és
Az unió értékhalmazának jelölése:
.
Itt is külön elnevezést adtunk annak az esetnek, amikor a
leképezés kölcsönösen egyértelmű, ekkor az uniót egyesítésnek nevezzük.
Ebben az esetben is nagyon fontos, hogy mindig megkülönböztessük a konstrukció közbülső szintjén
levő uniót ( ) az új
típusértékhalmaztól (
).
A harmadik megengedett típuskonstrukciós művelet az iterált,
amellyel egy meglevő típusból alkothatunk új típust. Legyen
típus,
a neki megfelelő
típusértékhalmaz, és
a
típus elemi típusértékhalmaza.
8.3. Definíció (ITERáLT).
Azt mondjuk, hogy a
típus iteráltja a
típusnak, ha
ahol
,
és
Az iterált típusértékhalmazának jelölése:
.
Az iterált típuskonstrukciónak három speciális esetét különböztetjük meg aszerint,
hogy a leképezésre milyen feltételek teljesülnek.
Ha a leképezés kölcsönösen egyértelmű, akkor sorozat típuskonstrukcióról
beszélünk, és típusértékhalmazát
-lal jelöljük.
Ha
akkor az iterált konstrukcót kombináció típusnak nevezzük. A kombináció
értékhalmazának jelölése: .
Ha
akkor halmaz típuskonstrukcióról beszélünk. A halmaz típus értékhalmazának
jelölése: .
Természetesen az imént felsorolt három eset csak speciális formája az iteráltképzésnek; létezik olyan iterált is, amely egyik fenti kritériumot sem teljesíti.