A vezérlési szerkezetek nagy része ugyanaz mint Java-ban, pár újdonságtól eltekintve, amik alább láthatóak.
Egy kis "újdonság", hogy megjelent a goto kulcsszó ;). Ha nagyon mély rekurziót írunk, előfordulhat, hogy a programunk leáll StackOverflowException-nel. Ez azért van, mert minden visszatérési cím, lokális változó és függvényparaméter a veremben tárolódik. Egy speciális esetben ez az intenzív veremhasználat elkerülhető. Azt az esetet, amikor a rekurzív függvény a törzse végén hívja meg saját magát "tail call recursion"-nek hívjuk. Ebben az esetben jelezni tudjuk a fordítónak, hogy olyan kódot generáljon, ami nem használja a vermet. Ezt a függvény előtti continue kulcsszóval jelezzük, a rekurzív hívást a függvénytörzs végén pedig a goto kulcsszóval kell jeleznünk.
Hasznos kiegészítés még az osztály típusára vonatkozó mintaillesztés. A Pizza a Java switch vezérlőelemét terjeszti ki, hogy ezt a funkcionalitást megvalósítsa. Vegyük az alábbi példát:
Ehelyett használhatunk mintaillesztést, a switch és case kulcsszavakkal:
Ez sokkal átláthatóbb és jobban kifejezi, amit akarunk. Mindemellett ha az adott case ágban az objektum rendelkezik a megadott szignatúrájú konstruktorral, akkor az adott ághoz tartozó kódban elérhetővé válnak a formális paramétereken keresztül az objektum ezen adattagjai. Az egyezés pozíció alapján történik, tehát a szignatúrának egyeznie kell.
A joker paraméter a mintában az aláhúzás. Ezt akkor használhatjuk, ha az adott ágban egy paramétert nem szeretnénk használni:
A változók több szintjén is lehet mintailleszteni, ezt hívják mély mintaillesztésnek (deep pattern matching). A következő példán szemléltetjük ezt. A mapPairs két lista elemeit veszi sorra és a paraméterül kapott függvénnyel csinál belőlük egy új elemet amit felfűz egy harmadik listára. A végén ezt adja vissza.