Smyčky
Předcházející | Kapitola 6. Programování s jazykem GEL | Další

## Smyčky

### Smyčky while

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`.

### Smyčky for

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.

### Smyčky foreach

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].

### Break a continue

Ve smyčkách můžete použít také příkazy `break` a `continue`. Příkaz `continue` posune smyčku na začátek následující iterace, zatímco příkaz `break` aktuální smyčku ukončí.

    while(<expression1>) do (
      if(<expression2>) break
      else if(<expression3>) continue;
      <expression4>
    )

Předcházející | Nahoru | Další
Kapitola 6. Programování s jazykem GEL | Domů | Součty a součiny