Syntaxe:
while <expression1> do <expression2> until <expression1> do <expression2> do <expression2> while <expression1> do <expression2> until <expression1>
Je to podobné jako v jiných jazycích. Jelikož v jazyce GEL jde ve skutečnosti jen o výraz, musí vracet nějakou hodnotu a proto konstrukce vrací výsledek poslední iterace nebo NULL
, pokud žádná iterace neproběhne. V pravdivostních výrazech se =
převádí na ==
, stejně jako u příkazu if
.
Syntaxe:
for <identifier> = <from> to <to> do <body> for <identifier> = <from> to <to> by <increment> do <body>
Smyčka s identifikátorem, který je postupně nastaven na všechny hodnoty od <from>
do <to>
, volitelně se použije jiný krok než 1. Jedná se o rychlejší, hezčí a kompaktnější řešení, než je normální smyčka uvedená výše, ale je méně flexibilní. Identifikátor musí být identifikátor a nemůže být dereferencí. Hodnota identifikátoru je poslední hodnotou identifikátoru nebo <from>
, pokud tělo nebylo vůbec vyhodnoceno. Je zaručeno, že proměnná bude po smyčce inicializována, takže ji můžete bezpečně použít. <from>
, <to>
a <increment>
nesmí být komplexní hodnoty. Není zaručeno, že bude dosaženo <to>
, ale rozhodně nebude nikdy překročeno, například následující kód vypíše lichá čísla od 1 do 19:
for i = 1 to 20 by 2 do print(i)
Pokud je jedna z hodnot desetinné číslo, je závěrečná kontrola prováděna v rozmezí 2^-20 z velikosti kroku. To znamená, že i když se překročí 2^-20 krát více, stále ještě bude provedena poslední iterace. Tímto způsobem dá
for x = 0 to 1 by 0.1 do print(x)
očekávané výsledky, i když přičtením desetkrát 0,1 dostaneme o něco víc než 1,0 z důvodu, jakým jsou desetinná čísla uložena ve dvojkové soustavě (není to 0,1, skutečné uložené číslo je nepatrně větší). Není to sice perfektní řešení, ale stačí pro většinu případů. Jestli se chcete vyhnout tomuto problému, použijte racionální číslo, například:
for x = 0 to 1 by 1/10 do print(x)
. Tato kontrola se dělá až do verze 1.0.16, takže provádění kódu se u starších verzí může lišit.
Syntaxe:
for <identifier> in <matrix> do <body>
Pro každý prvek matice, postupně řádek po řádku zleva doprava, se provede tělo s identifikátorem nastaveným na aktuální prvek. Když chcete vypsat čísla 1,2,3 a 4 právě v takovémto pořadí, můžete to udělat takto:
for n in [1,2:3,4] do print(n)
Jestli potřebujete projít řádky a sloupce matice, můžete použít funkce RowsOf a ColumnsOf, které vrací vektor řádků nebo sloupců matice. Takže
for n in RowsOf ([1,2:3,4]) do print(n)
vypíše [1,2] a pak [3,4].