8.5A típuskonstrukciók típusműveletei

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.