A Cupit párhuzamos nyelv mesterséges neuronok programozására

Típusok, típuskonstrukciók

A típusok hierarchiája:

Egyszerű típusok

A legtöbb programozási nyelvhez hasonlóan definiálták itt is. Megemlíteni a String típust, mely a C-hez hasonlóan karakterek tömbje \0 véggel; és SYMBOLIC típust érdemes, mely felsorolási típusnak felel meg, azzal a különbséggel, hogy nem rendezett, így nem konvertálható számmá.
Az Int1, Int2 a pontosságra utal (1,2 byte).

Intervallum

Az elnevezés magáért beszél. Két számot tárolnak, és a köztük levő intervallumot is hozzá kell érteni. A különböző elnevezések itt is a pontosságra utalnak az Int, Int1, Int2, Real típusoknak megfelelően.

Rekord

Leginkább a Modula-2 rekordjára hasonlít. Eleme lehet egyszerű típus, intervallum, rekord, tömb. Kezdőértéket is adhatunk az értékek megfelelő sorrenden történő felsorolásával akár a típus definiálásánál is.

Példa:

TYPE Atype IS RECORD Int a,b=7; END; TYPE BType IS RECORD A x = A(2,5); Int c = 0 END;

Csomópont (Node)

A hálók aktív elemei, objektumai, így a belső attribútumokon kívül eljárásokat is tartalmazhatnak magukban. Pontosabban rendelkezik interface-szel ami segítségével egymáshoz lehet őket kapcsolni. Itt megkülönböztetjük az IN, OUT típusúakat.
Van adattag, aminek típusa analog a record-nál elmondottakkal. Továbbá még megadhatók "private" eljárások, függvények, melyeket csak ezen Node használhat. Ennek segítségével valósítható meg az adatok védelme, láthatóságuk korlátozása. Fontos megjegyezni, hogy egy node egy másik node adattagját nem érheti el, csak éleken keresztül, és így is csak az interface-ben definiáltakat használva. Végül definiálhatunk Merge eljárást, melyről később lesz szó.

TYPE Name IS NODE NodeInterface; NodeData; MergeProc; ObjProc; ObjFunc; END;

Él (Connection)

A csomópontok közti kommunikációt biztosítja. Igen erős korlátozások vonatkoznak rá. Egy él csupán a csomópontok Interface elemeit érheti el. Nem lehet tagja más típusnak (rekord, node), és nem lehet sem globális sem lokális váltózó sem. Azonban paraméterként átadható EXTERNAL eljárásnak. Így nem lehet explicit deklarálni őket, csak más, a későbbiekben elmondottak szerint lehet őket létrehozni.
További megkötés, hogy irányítottnak kell lennie. (Ennek oka a kódgenerálás optimalizálásában és a párhozamosság lehető legjobb kihasználásában van.)

TYPE Name IS CONNECTION ConnectionData; MergeProc; ObjProc; ObjFunc; END;

Tömb (Array)

A tömbök kezelése hasonlít a Modula-2 tömb típusáéhoz, azonban az indexelés 0-val kezdődik és "méret-1"-ig tart. Indexhatárok túllépése esetén run-time error lép fel.

TYPE Name IS ARRAY[size] OF TypeId;
,ahol size tetszőleges konstans kifejezés lehet, amit még fordítási időben ki lehet értékelni.

Csoport (Group)

Tulajdonképpen az azonos típusok egy halmaza. Elemit a tömbhöz hasonlóan lehet elérni, mely ellenőrzötten történik (run-time error). Ez a típus azonban csak halók (Network) elemeként jelenhet meg.
Műveletei: Utolsó elem törlése, beszúrás a lista végére, csoport elemeinek önmaguk általi törölése, megduplázása. Az utóbbi két művelet az indexek újraszámolását eredményezi.
A csoport kezdeti mérete 0.

TYPE Name IS GROUP OF TypeId;

Háló (Network)

A fő adattípus, mely a teljes hálót tárolhatja. így rendelkezhet adattagokkal a rekordhoz hasonló megkötésekkel, eleme lehet csoport is. (Node típust csak group típusban tárolhat.)

TYPE Name IS NETWORK NetworkData; MergeProc; ObjProc; ObjFunc; END;