A típuskonstrukciók eddigi tárgyalásából még hiányzik valami: nem beszéltünk még a konstruált típusok műveleteiről. Az előbb felsorolt speciális esetekhez – az imént definiált függvények segítségével – bevezetünk néhány típusműveletet.
A továbbiakban megengedett feltételnek fogjuk nevezni azokat az
állításokat, amelyek lehetnek elágazás, vagy ciklus feltételei.
Legyen
rekord,
,
(
). Mivel
az állapottér
változója,
komponálható a szelektorfüggvényekkel, és így az állapotéren értelmezett függvényeket kapunk. A
függvénykompozíciót
a továbbiakban
-vel fogjuk jelölni. Egy rekord típusnál a szelektorfüggvény használatát
megengedettnek tekintjük.
Ezen kívül bevezetjük a jelölést is. Ezen azt a
értékadást értjük, amelyben
és
minden más
komponense megegyezik
megfelelő komponensével.
A fenti típusműveletek arra adnak lehetőséget, hogy egy rekord „mezőinek"
az értékét lekérdezhessük, illetve megváltoztathassuk. A fent definiált
műveletben zavaró lehet, hogy egy függvény helyettesítési értékének
( )
„adunk értéket". Ezért fontos megjegyezni, hogy ez csupán egy jelölése az
értékadásnak.
Legyen
egyesítés,
,
(
).
Ekkor a rekord típusnál bevezetett jelölést az egyesítés esetén is bevezetjük,
-n, az
kompozíciót értjük, és megengedett függvénynek tekintjük.
Ezen kívül megengedett művelet a
értékadás. Ennek az értékadásnak a jelölését leegyszerűsítjük, a továbbiakban
alakban fogjuk használni.
A fenti értékadást bizonyos ésszerű korlátozások bevezetésével
„megfordíthatjuk". Így kapjuk az alábbi parciális értékadást:
. Ez az értékadás csak
akkor végezhető el, ha
igaz.
A sorozat típuskonstrukció nagyon gyakori, és sokféle művelet definiálható vele kapcsolatban. Attól függően, hogy melyeket tekintjük megvalósítottnak, különböző konstrukciókról beszélünk. Most előbb megadunk néhány lehetséges műveletet, majd ezután a sorozat típusokat osztályba soroljuk a megengedett műveleteik alapján.
Legyen a továbbiakban ,
,
.
Ekkor az iménti szelektorokhoz hasonlóan bevezetjük az alábbi jelöléseket:
Természtesen
és
csak
parciális függvények. Ezen kívül az alábbi (esetleg parciális) értékadásokra a
következő jelöléseket fogjuk használni:
A bevezetett jelölések első látásra zavarba ejtőnek tűnhetnek, hiszen ugyanazt a kulcsszót a baloldalon függvényként, a jobboldalon pedig a művelet neveként használjuk. Lényeges ezért megjegyezni, hogy a jobb oldalon található műveletek csa a baloldali értékadás egyszerűsítő jelölései.
Attól függően, hogy a fent definiált műveletek közül melyeket tekintjük megengedettnek, különböző konstrukciókról beszélünk.
8.5. Definíció (SPECIáLIS SOROZATTíPUSOK).
Legyen
. Ekkor a
![]()
szekvenciális input file, ha csak a
a megengedett művelet,
szekvenciális output file, ha csak a
a megengedett művelet,
verem, ha a megengedett műveletek a
és a
, vagy a
és a
,
sor, ha a megengedett műveletek a
és a
, vagy a
és a
.
Ahhoz, hogy a szekvenciális input file a
művelettel használható legyen, tudnunk kell, hogy mikor olvastuk ki az utolsó elemet a
file-ból. Ezt a problémát úgy szoktuk megoldani, hogy bevezetünk egy extremális
elemet, és kikötjük, hogy a file-ban ez az utolsó elem (tehát még az üres file is
tartalmazza). Ez a technika valósul meg azokban az operációs rendszerekben, ahol a
szövegfile-ok végét file-vége (EOF) karakter jelzi.
Mivel a művelet bizonyos esetekben kényelmetlen lehet – gondoljunk arra,
amikor nehézkes extremális elemet találni –, bevezetünk egy másik
olvasóműveletet is. Használjuk az olvasás sikerességének jelzésére a
halmaz elemeit.
Ekkor az
műveleten az alábbi értékadásokat értjük:
Ha egy szekvenciális
file-ra a
művelet van megengedve, akkor nincs szükség extremális elemre, helyette az
változó értéke alapján lehet eldönteni, hogy végére értünk-e a file-nak.
Legyen ,
,
,
.
Ekkor a sorozat típushoz hasonlóan bevezetjük az alábbi jelöléseket:
A fenti függvényeken kívül a függvény típus szelektorfüggvényét
-t is megengedettnek tekintjük. A rekord típusnál bevezetett szelektorra
(mezőre) vonatkozó értékadásnak jelen esetben is van megfelelője: az
parciális értékadás. Az értékadás azért parciális, mert csak akkor végzhető el, ha
. Ekkor a fenti jelölésen
azt az
értékadást
értjük, amelyre:
A sorozatokra bevezetett kiterjesztő és elhagyó műveleteket függvény típusra is definiáljuk:
Ha ezen utolsó csoportban felsorolt műveleteket egy függvénytípusra nem engedjük
meg, akkor egy speciális függvénytípushoz, a vektorhoz jutunk. Az általános
függvénytípustól megkülönböztetendő a vektortípusra külön jelölést vezetünk
be: .
Ha azt is jelölni kívánjuk, hogy mik a vektor indexhatárai, akkor a típust
-vel
jelöljük. További jelölésbeli eltérés az általános függvénytípustól: a
szelektorfüggvény jelölésére nem a kerek, hanem a szögletes zárójelet
használjuk.