A vezérlés normális esetben az un. "main (read-eval-print) loop"-ban van. Ez azt jelenti, hogy először begépeljük az inputot, a GAP kiértékeli, majd kiírja az eredményt.
A folyamat pontosan az alábbi módon történik: Annak jelzésére, hogy a GAP kész fogadni a bemenetet megjelenik a gap> prompt. Utasításaink vé- gén mindenképpen be kell írnunk, hogy return. (Ez kiváltható az enter (vagy az ennek megfelelő) billentyű lenyomásával.) Ez azért szükséges, mert a GAP addig nem csinál semmit, így szabadon szerkeszthetjük a bemenetet. Egy sorba tobb utasitást is írhatunk. (Persze mindegyiket pontosvesszővel lezárva.)
Teljesen elfogadható, ha egy utasitást tobb sorba írunk. Miután beírtuk az utasítás elejét, es enter-t ütöttünk, ha az utasítás nem teljes, a GAP a részleges promtot mutatja (>). Ha ilyet látunk, tudhatjuk, hogy a GAP vár az utasítás további részére. Ez történik akkor is, ha elfelejtjük a pontos vesszőt. Viszont megjegyzendő, hogy a return előtti rész kiértékelődik független ül attol, hogy befejeztük az utasítást, vagy sem.
Ez után szintaktikai ellenorzés történik. Ha ez rendben találtatik, megtört énik a kiértékeles, vagy a vegrehajtás. Ha nem látjuk a promptot, az azért van, mert a GAP még mindig az előző inputon dolgozik.Ha végzett kiírja az eredményt, ha van ilyen. Ha nem szeretnénk latni, akkor az utasítás végére dupla pontosvesszőt kell írnunk.
Egy utasítás során mindig elerhető az előző olyan utasítás eredménye, amelynek volt ilyen a last változóban. Az az előtti a last2-ben van, és így tovább.
Hasonlóan az előzőekhez tárolja az utolsó utasítás óta eltelt időt a time változó.
Ha valamilyen hiba adódik, vagy megszakítjuk a futást (jellemzően Ctrl+c- vel), akkor lép a GAP az un. break loop-ba. A break loop a legtöbb tekintetben hasonlít a main loopra, azaz beírhatunk utasításokat, a GAP beolvassa, kiértékeli őket, majd megmutatja az eredményt, ha van. Ezek a kiértékelések abban a környezetben történnek, amelyben a hiba történt. így átnézhetjük a hiba történtekor aktív függvények argumentumait, lokális változóit, sőt meg is változtathatjuk azokat. A prompt megváltozik brk>-re, jelezve, hol is vagyunk.
Ha hiba történik a break loopban, akkor ismét egy break loop-ba lépünk, csak mélyebb szinten.
Kétfélekeppen tudjuk elhagyni a break loopot.
Az első, hogy kilépunk. Ez a quit paranccsal, vagy az eof karakterrel (rendszerint
Ctrl+d) történik. Ebben az esetben a vezérlés átadódik az egyel
magasabb szintű break loopnak, vagy ha nincs ilyen, a main loop-nak.
A másik mód a visszatérés. Ezt a return;, vagy a return expr; paranccsal
érhetjük el. Ha szándekosan vagyunk a break loop-ban, visszatérhet
ünk return;-nel. Ha valamilyen hiba miatt, akkor lehet, hogy még előbb
meg kell változtatnunk néhány változó értéket, vagy esetleg valamilyen értékkel
kell visszatérnünk. Hogy adott esetben a lehetőségek közül melyek állnak
rendelkezésünkre, arról tájékoztatást kapunk közvetlenül az után, hogy bel
éptünk a break loopba.
Hozzáférhetünk az adott, és a magasabb szinten lévő változókhoz is. De ha ugyanazt a változónevet használjuk, az alacsonyabb szintű objektum elfedi a magasabb szinten levőt.
Ha ezeket szeretnénk elérni, használhatjuk a DownEnv( [nr] ) illetve a UpEnv( [nr] ) függvényeket. A DownEnv( [nr] ) az argumentumban megadott lépésnyivel feljebb lép a környezetben. A visszalépéshez negatív számot kell megadnunk. Az UpEnv( [nr] ) éppen ennek ellenkezőjét csinálja. (Kicsit zavaró, hogy a nevük éppen fordítva van, ez értelmezés kérdése. (Talán célszerű lenne "ki" és "be" haladni.) Mindenesetre talán a legjobb megoldás, ha csak az egyiket használjuk, így nem tudjuk összekeverni.) Fontos, hogy ezek a függv ények csak arra szolgálnak, hogy elérjuk az adatainkat minden szinten, és ha visszatérünk, akkor automatikusan a megfelelő szintre ugrik a vezérlés.
Általános esetben kilépni a quit paranccsal, vagy az eof karakterrrel (Ctrl+d) tudunk. Vészhelyzetben ugyanerre a QUIT szolgál bármely gap>, brk> vagy brk_nn> promptnál.
A tulajdonképpeni kilépés előtt mindig meghivódnak azok a függvények, amelyeket előzőleg beállítottunk az InstallAtExit> használatával.
A nyelv nem támogatja a többszörös értékadást, és az értékadás nem kifejezésnek számít.
Első típus: nincs csellengő else.
Második típus: A kifejezésben a stats2 ág a második ifhez tartozik.
A második típusú kifejezéssel ekvivalens a következő.
While | while bool-expr do statements od; |
Repeat | repeat statements until bool-expr |
For | for simple-var in list-expr do statement od; |
While
Repeat
For
A különbség a while és a repeat ciklus között, hogy a másodiknál legal ább egyszer lefut a ciklusmag.
A Break és a Continue utasítások csak cikluson belül használhatóak.
Break: azonnal kilépünk a legbelsőciklusból
Continue: az aktuális iteráció további részét nem hajtjuk végre
GOTO nincs.
Nincs explicit blokk utasítás. A ; terminator. Konkrét üres utasítás sincs, viszont a ciklusmag lehet üres.