A Stratego számára egy forrásfájl egy fordítási egység; ezeket modulnak nevezzük. A modul általános szerkezete (e blokkokat egymás után írjuk, azokat speciális jellel nem zárjuk le):
module modulnév
- fejlécimports lib1 lib2 ... libn
- importált modulok neveisignature
- szignatúrablokk, lásd 3. fejezetrules
- szabályok felsorolása, lásd a következő szakaszt strategies
- stratégiák felsorolása, lásd 3. szakasz main
a neve. Ez a stratégia fog a bemenő adatokra lefutni.
Felhasználói stratégiát a modul strategies
blokkjában definiálunk, azokat újsorral választjuk el. A paraméter nélküli stratégia-definíció általános formája: stratégianév = stratégia
.
Például egy programnak lehet a fő stratégiája az Eval
szabály alkalmazása. Ekkor a modul formája:
A stratégiák paraméterekkel is rendelkezhetnek. Kétféle paramétert különböztetünk meg:
A stratégia formális paraméterlistájában először a stratégiaparamétereket soroljuk fel, majd egy |
jel után a termparamétereket. Ha nincsenek termparaméterek, a |
jel elhagyható. Például a standard könyvtárban található try
stratégiát, ami megkísérel alkalmazni egy stratégiát, de sikertelenség esetén az aktív termet változatlanul hagyja, a következőképp definiáljuk:
A Stratego lehetőséget ad rekurzív stratégiák definiálására. A régebb óta támogatott mód a fixpontkombinátoros forma. A rec
operátor első paramétére egy változónév, második paramétere egy kifejezés. A kifejezést úgy értékeli ki, hogy a változónév helyére rekurzívan behelyettesíti önmagát. Például a standard könyvtárbeli repeat(s)
stratégiát, ami egy s
stratégiát mindaddig alkalmaz, míg a kapott termre s
alkalmazható, a következőképp definiálhatjuk:
Az újabb verziókban már az egyszerűbb jelölés is megengedett, a stratégiára név szerint is hivatkozhatunk: