Ciele
- Naučiť sa vytvárať vykonateľné programy.
- Oboznámiť sa s operáciami pre vstup a výstup.
Postup
Krok 1: Spustiteľný program
Spustiteľný program v jazyku Haskell musí obsahovať funkciu main :: IO ().
Úloha 1.1
Vytvorte nový súbor hello.hs, obsahujúci funkciu main:
main :: IO ()
main = putStrLn "Hello world!"
Skompilujte tento program:
ghc hello.hs
Krok 2: Vstup a výstup
Úloha 2.1
Upravte program hello.hs tak, aby sa po spustení opýtal na meno používateľa a na mesto, kde žije. Následne vypíše pozdrav v formáte: „Hello, <meno> from <mesto>!“.
Poznámka
Použite funkcie getLine a putStrLn. Použite let na skonštruovanie reťazca s pozdravom pred jeho vypísaním.
Úloha 2.2
Ak ste kód napísali pomocou do-notácie, skúste ho prepísať pomocou operátora >>=. Alebo naopak, ak ste použili operátor >>=, prepíšte ho pomocou do-notácie.
Krok 3: Validácia vstupu
Úloha 3.1
Implementujte funkciu getInt :: IO Int, ktorá sa opýta používateľa na celé číslo a vráti ho. Ak používateľ zadá neplatný vstup, program sa opýta znova. Použite funkciu readMaybe z modulu Text.Read na konverziu reťazca na číslo.
Krok 4: Dotazník
Úloha 4.1
Nech máme definovaný zoznam otázok:
questions :: [String]
questions =
[ "What is your name?"
, "What is your favourite language?"
, "What would you like to build?"
]
Definujte funkcie ask a askAll. Prvá sa bude pýtať zadanú otázku a vráti odpoveď. Druhá sa postupne opýta všetky otázky zo zoznamu a vráti zoznam odpovedí.
ask :: String -> IO String
askAll :: [String] -> IO [String]
Poznámka
Skúste implementovať funkciu askAll pomocou rekurzie aj pomocou funkcie mapM.
Krok 5: Práca so súbormi
Úloha 5.1
Upravte program na zobrazovanie histogramu tak, aby čítal zoznam čísel zo súboru, názov ktorého bude zadaný ako argument príkazového riadku.
Poznámka
Použite funkcie pre prácu so súbormi a funkciu getArgs. Potrebujete tiež pridať do kódu:
import System.Environment
Krok 6: Balík a závislosti
Úloha 6.1
Vytvorte aplikáciu pre hádanie mysleného čísla: Nech počítač si myslí číslo a používateľ háda myslené číslo. Počítač nech po nesprávnom odhade povie, či je myslené číslo väčšie alebo menšie ako hádané.
Aby sme mohli používať doplňujúcu knižnicu random, vytvoríme nový projekt. V novom adresári guess spustíte príkaz pre vytvorenie projektu:
cabal init
Na všetky otázky stačí dať predvolenú odpoveď.
V súbore guess.cabal pridajte závislosť na balík random:
-- Other library packages from which modules are imported.
build-depends: base ^>=4.20.2.0,
random
Môžete použiť pomocnú funkciu randNumber na generovanie náhodného čísla na základe špecifikovaného intervalu a odovzdaného generátora:
module Main where
import System.Random
main :: IO ()
main = do
number <- randNumber 1 10
putStrLn ("Hello, " ++ show number ++ "!")
randNumber :: Int -> Int -> IO Int
randNumber a b = getStdGen >>= \gen -> return (fst (randomR (a, b) gen))
Teraz na spúšťanie programu vám stačí použiť príkaz:
cabal run