Haskell Hero

Interaktivní učebnice pro začínající Haskellisty

Práce se skriptem

Úvodem

Hugs si při zapnutí načte do paměti definice funkcí a konstant z knihovny Prelude. Tato knihovna mimo jiné obsahuje například definice funkcí odd, even, div, mod a konstanty pi. Od této chvíle můžeme tyto funkce používat.

Chtěli bychom, aby k těmto definicím Hugs přidal i naše vlastní definice. Při jednorázovém používání můžeme do vyhodnocovaného výrazu vložit lokální definici. Při opakovaném používání těch samých funkcí by bylo nepraktické u každého výskytu naší funkce psát lokální definici. Proto budeme v těchto případech používat globální definice uložené ve skriptu.

Vytváříme skript

Pod názvem skript si nepředstavujte nic složitého. Haskellovský skript je klasický textový soubor s příponou .hs.

Ve Windows otevřeme libovolný textový editor (např. poznámkový blok) a v menu Soubor zvolíme Uložit jako.... Jako název souboru můžeme napsat cokoli s příponou .hs, například pokus.hs. V otevírací nabídce níže přepneme Textové soubory na Všechny soubory, aby se k názvu souboru automaticky nedoplňovala přípona .txt.

Na linuxu otevřeme v terminálu libovolný textový editor. Zde si ukážeme základní práci s editorem nano. Ten spustíme jednoduchým napsáním nano a stisknutím Enteru. Uložení souboru v editoru provedeme stisknutím kláves Ctrl + O. Jako název souboru napíšeme například pokus.hs a stiskneme Enter. Editor se vypíná klávesovou kombinací Ctrl + X.

Tímto máme vytvořený prázdný skript, můžeme jej nahrát do Hugsu a poté se pustit do jeho editace.

Nahráváme skript do Hugsu

Ve WinHugsu máme dvě možnosti, jak skript do Hugsu nahrát.

  • Tou první je kliknutí na tlačítko Load modules from specified file v horním menu a vybrání příslušného souboru na disku.
  • Nebo můžeme soubor nahrát přes povel :load název/cesta k souboru, zkráceně :l název/cesta k souboru.

V linuxu nahrajeme soubor

  • povelem :load název souboru. I zde můžeme použít zkrácenou verzi povelu :l název souboru.
  • přímo při spuštění Hugsu napsáním do terminálu hugs souborSeSkriptem.hs

    Pokud se příkazový řádek změní z Hugs> na Main>, znamená to, že byl skript úspěšně nahrán a můžeme od této chvíle používat definice v něm obsažené.

Editujeme skript

Skript budeme upravovat v textovém editoru. Ten spustíme klasickým spuštěním textového editoru a otevřením skriptu jako textového souboru. Pokud již máme skript nahrán v Hugsu, můžeme jeho editaci vyvolat povelem :e. Po ukončení editace soubor uložíme.

Ještě nám zbývá říct Hugsu, aby změněný soubor znovu načetl. To můžeme udělat buďto povelem :load název souboru, nebo povelem :reload, zkráceně :r.

Odsazování

Pokud píšeme nějaký skript s dlouhými řádky, je často přehlednější řádky zalomit. Jak to ale udělat, aby Hugs pochopil, že nový řádek není nový řádek, ale pokračování toho předešlého? Jednoduše. Na začátek nového řádku přidáme alespoň jednu mezeru. 

Toto je první řádek.
Toto je druhý řádek a
 toto je pokračování druhého řádku.

Mezera na začátku nemusí být pouze jedna. Může jich být libovolný počet, ale řádek navazující musí být odsazený víc, než řádek navazovaný. Dobré přehlednosti se dá dosáhnout u výrazu if-then-else při odsazení slova else pod then.

if even 5 then "Ano"
          else "Ne"

Takto se dá zanořovat i vícenásobně. Například při použití vnořené podmínky.

if even 5 then "Ano"
          else if 7 < 9 then "Ano"
                        else "Ne"

V tomto případě se nejdříve vyhodnotí podmínka even 5, jejímž výsledkem je False. To znamená, že se celý výraz vyhodnotí na část výrazu za else.

if 7 < 9 then "Ano"
         else "Ne"

Dále se podmínka 7 < 9 vyhodnotí na True, takže se celý výraz vyhodnotí na "Ano".