fi mu 11. 12. 2019 19.45 ib015 – Neimperativní programování Cvičení 0: Technické okénko Fialové rámečky na začátku každého cvičení obsahují věci, které je bezpodmínečně nutné znát ještě před začátkem cvičení. Neslouží jako opakování přednášky, avšak jsou vám ku pomoci při přípravě na cvičení. Před nultým, technickým cvičením je zapotřebí znát: svoje učo (universitní číslo osoby, správnost si ověříte přihlášením do ISu); svoje fakultní přihlašovací jméno (tzv. xlogin) a fakultní heslo (to je jiné než do ISu). Svůj xlogin zjistíte a heslo můžete změnit na https://is.muni.cz/ auth/system/heslo_fi. Oranžové rámečky obsahují upozornění a varování. Jindřiška varuje: Na cvičení je normální se připravovat. Nebudete-li s pojmy ve fialových rámečcích srozuměni, pravděpodobně si ze cvičení kromě pocitu neúspěchu příliš neodnesete a hrozí vám vyloučení ze cvičení. Nulté cvičení je velmi nestandardní. Trvá necelou hodinu a nezabývá se náplní předmětu, ale má za úkol vás seznámit s počítačovou učebnou b130 a jejím programovým vybavením, aby se na prvním cvičení nemusely řešit problémy technického rázu. Vysvětlivky Při té příležitosti se hodí vysvětlit význam piktogramů objevujících se u některých příkladů v této sbírce: Symbolem jsou označeny ty příklady, které by se měly stihnout na cvičení. Příklady bez tohoto symbolu tak slouží spíše pro domácí studium a přípravu. Mimochodem, přesný význam tohoto symbolu vám bude objasněn na konci semestru; pokud mu chcete nějak říkat, můžete používat termín bind. Ještě více mimochodem, podobnost s logem Haskellu není náhodná. Tužkou ( ) jsou označeny příklady, které byste měli být schopni vyřešit správně s použitím pouze tužky a papíru, stejně jako se to po vás bude chtít u zkoušky.1 Interpret doporučujeme použít až ke kontrole. Démantem ( ) označujeme příklady, které sice nejsou v plánu cvičení, ale přesto je velmi doporučujeme vyřešit, neboť je považujeme za zajímavé či zvláště přínosné. Očekáváme, že tyto příklady budete řešit pravidelně v průběhu semestru a mohou vám pomoci při řešení odpovídajících domácích úkolů. Mírně obtížnější, ale o to poutavější příklady pak nesou hvězdičku ( ) či několik hvězdiček podle obtížnosti či pracnosti. Trojhvězdičkové příklady mohou sahat i za rámec tohoto předmětu. Zelené rámečky obsahují rady, doporučení a tipy na další zdroje ke studiu. Pan Fešák doporučuje: K většině příkladů se na konci sbírky nachází řešení. Podporuje-li váš prohlížeč dokumentů odkazy, můžete klepnutím na číslo příkladu na jeho řešení skočit. Př. 0.0.0 Zkuste si to! 1 Nepodlehněte však iluzi, že před zkouškou stačí projít tužkou označené příklady a zelenou známku máte v kapse. Piktogram totiž nijak nesouvisí s typem příkladů objevujících se u zkoušky. 1 IB015 – 0. cvičení 0.3 Vzdálené připojení na fakultní počítače 0.1 Základní využívání školních počítačů Př. 0.1.1 Přihlaste se na školní počítač (pomocí xloginu a fakultního hesla). Po přihlášení spusťte terminál (buď jej vyhledejte, nebo pomocí klávesové zkratky Ctrl + Alt + T ). Po spuštění by měl terminál pracovat ve vašem domovském adresáři (/home/xLOGIN). Příkazem pwd si vypište aktuální adresář. Př. 0.1.2 Vytvořte si ve svém domovském adresáři adresář ib015. Můžete využít terminál nebo grafický správce souborů. Př. 0.1.3 V adresáři ib015 vytvořete nový soubor Sem0.hs s následujícím obsahem: hello = "Hello, world" 0.2 Používání GHCi Př. 0.2.1 V terminálu v adresáři ib015 si příkazem ghci spusťte interpret Haskellu. Př. 0.2.2 V interpretu si zkuste vyhodnotit jednoduché aritmetické výrazy, tedy využít ho jako kalkulačku. Př. 0.2.3 Do GHCi načtěte soubor Sem0.hs a nechte si vypsat konstantu hello. Následně si od interpretu vyžádejte její typ. Př. 0.2.4 Do souboru Sem0.hs přidejte konstantu my_number typu Integer a nastavte ji na svou oblíbenou hodnotu. Po uložení souboru jej znovu načtěte do GHCi a konstantu vypište. Interpret následně ukončete. 0.3 Vzdálené připojení na fakultní počítače Pan Fešák doporučuje: Používání vzdáleného připojení přes SSH není v tomto předmětu nezbytně nutné, ale může se vám hodit a určitě jej budete potřebovat jinde, tak proč se to nenaučit již nyní. Vzdálené připojení vám umožní používat GHCi a další nástroje na počítačích na FI a dostat se k vašim kódům ze cvičení odkudkoli. Na školní stroje se systémem Linux se lze připojit pomocí SSH. Na Linuxu či macOS se obvykle jako klient SSH používá příkaz ssh. Pokud klient nemáte, mělo by být možné jej nainstalovat z balíčků (bude se nejspíš jmenovat openssh-client nebo openssh). Na Windows 10 je příkaz ssh k dispozici v PowerShellu. Záložní možností je pak klient Putty. K přihlašování z vnějšku fakulty slouží server aisa.fi.muni.cz (ze sítě FI dostupný i jako aisa). Přes tento počítač se pak případně dá dostat i k jiným, ale to nebývá potřeba, protože váš domovský adresář je sdílen přes všechny fakultní linuxové stroje. Př. 0.3.1 Přihlaste se ze svého nebo školního počítače k serveru aisa.fi.muni.cz. Tam přidejte modul s novým GHC pomocí příkazu module add ghc2 a následně načtěte do GHCi kód ze cvičení. 2 Na Aise je nainstalované příliš staré GHC, které se od toho námi používaného liší typy některých seznamových funkcí. 2 IB015 – 0. cvičení 0.4 Nastavení vlastního počítače Př. 0.3.2 Pomocí příkazu scp si na svůj počítač zkopírujte z Aisy zdrojový kód ze cvičení. U sebe jej upravte a pošlete zpět na Aisu. Alternativně můžete vyzkoušet některý z klikacích nástrojů: na Windows WinSCP, v Linuxových grafických správcích souborů hledejte volbu „Připojit k serveru“ nebo podobnou. Př. 0.3.3 Nastavte si klient SSH tak, aby pro připojení k Aise stačilo zadat ssh aisa. Stejnou zkratku je pak možné využívat při kopírování souborů mezi počítači: scp Sem0.hs aisa:ib015/. Pan Fešák doporučuje: Nevíte-li si kdy v terminálu rady, zkuste před návštěvou svého oblíbeného vyhledávače použít příkaz man. Zde se bude hodit man ssh_config. Př. 0.3.4 Tento krok je určen pokročilejším uživatelům a sahá daleko nad rámec předmětu. Pokud nedisponujete dvojicí klíčů SSH pro asymetrické šifrování, vytvořte si ji. Přidejte na Aise svůj veřejný klíč mezi autorizované, abyste při přihlašování ze svého počítače nemuseli psát heslo. 0.4 Nastavení vlastního počítače Jindřiška silně doporučuje rozchodit si GHC na svém vlastním počítači. Bude se vám hodit při dělání domácích úkolů a přípravě na cvičení. Př. 0.4.1 Podle instrukcí v interaktivní osnově předmětu si nainstalujte GHC na svůj počítač a ověřte si, že funguje v rozsahu práce z tohoto cvičení. * * * Jindřiška varuje: Ať už budete používat vlastní či školní počítač, je naprosto nezbytné, abyste před prvním cvičením zvládli jeho obsluhu alespoň v rozsahu fialového rámečku na začátku následující kapitoly. Fialové rámečky na konci cvičení shrnují probrané koncepty. Můžete si s jejich využitím ověřit, jestli všemu ze cvičení rozumíte, nebo je potřeba se k nějakému tématu vrátit. Na konci cvičení byste měli zvládnout: přihlásit se k fakultním počítačům v učebně b130; vytvořit textový soubor s Haskellovým kódem; spustit v terminálu GHCi a načíst do něj vytvořený soubor; pracovat v terminálu vzdáleně na školním počítači Aisa. 3 Řešení Řeš. 0.0.0 Gratulki. Klepnutím na číslo řešení přeskočíte zpátky na příklad. Řeš. 0.1.2 Vytvořit jej můžete buď v terminálu (příkazem mkdir jméno a následně do něj přepnout pomocí cd jméno ), nebo v grafickém správci souborů, který by se měl otevřít v domovském adresáři a nový adresář by mělo být lze vytvořit pravým myšítkem nebo přes panel nabídek. Řeš. 0.1.3 Spusťte textový editor (například Gedit) a napište či překopírujte do něj text. Nezapomeňte soubor uložit do správného adresáře. Alternativně můžete soubor vytvořit i v terminálu, například editorem nano, který vám v dolní části zobrazuje klávesové zkratky, kterými se ovládá (ˆ znamená Ctrl ). Jiným oblíbeným terminálovým editorem je vim. Jeho obsluha vypadá zpočátku krkolomně, ale dá se rychle naučit: zkuste příkaz vimtutor či vimtutor sk. Řeš. 0.2.2 Zadejte výraz a stiskněte Enter . Např. 40 + 2 se vyhodnotí na 42. Vyhodnocení výrazů zapisujeme ve studijních materiálech pomocí lomené šipky s hvězdičkou: 40 + 2 ∗ 42. Další příklady: • 4 * 10 + 2 ∗ 42 • 2 ^ 8 ∗ 256 • (3 + 4) * 6 ∗ 42 Řeš. 0.2.3 Načíst soubor lze buď pomocí :load Sem0.hs nebo jen :l Sem0.hs (pokud se nachází ve stejném adresáři, kde jsme spustili GHCi), nebo tak, že spustíme GHCi přímo s tímto názvem souboru (ghci Sem0.hs). Konstantu vypíšeme prostě tak, že ji napíšeme do GHCi a stiskneme enter: hello ∗ "Hello, world". Její typ pak zjistíme příkazem interpretu :t, který jako parametr bere libovolný výraz: :t hello ∗ hello :: [Char]. Řeš. 0.2.4 my_number :: Integer my_number = 42 Znovunačtení lze provést příkazem :r, ukončení :q. Řeš. 0.3.1 Na Linuxu, macOS a Windows s dostatečně novým PowerShellem by mělo stačit zadat do příkazové řádky (či PowerShellu) ssh xLOGIN@aisa.fi.muni.cz a následně zadat své heslo; tím se ocitnete na Aise a můžete tam používat příkazovou řádku jako na cvičení. Na Windows s Putty musíte nastavit sezení (session), kde jako hostitele uvedete xLOGIN@aisa.fi.muni.cz. Pro trvalé přidání modulu můžete příkaz vložit do svého souboru .bashrc: $ echo "module add ghc" >> ~/.bashrc # Nebo textovým editorem Řeš. 0.3.2 $ scp xLOGIN@aisa.fi.muni.cz:ib015/Sem0.hs . $ vim Sem0.hs # Nebo jiný způsob editace $ scp Sem0.hs xLOGIN@aisa.fi.muni.cz:ib015/Sem0_edited.hs Poznámka: Znakem $ se běžně uvozuje text zadaný do terminálu, není ale součástí zadávaného příkazu. Řeš. 0.3.3 Do souboru ~/.ssh/config na svém počítači vložte: Host aisa HostName %h.fi.muni.cz User xLOGIN 4