-- komentovaný zdroják k prvnímu cviku, UTF-8 -- (žijeme v moderní době, tak si dovolím používat diakritiku ve zdrojáku) -- toto je komentář {- blokový komentář {- jde zanořovat -} -} {- haskellovský zdroják je souborem globáních definic -- definic funkcí které jsou přístupné v celém tomto souboru (nezávisle na pořadí) a v interpretru když si soubor importuji načteme: ghci případně hugh z interpretru :l -} a :: Double -- typ za dvojtečkou a = 3 -- definice konstanty -- tedy funkce která neočekává žádné parametry -- ( nulární funkce) b, c :: Double -- datový typ můžeme deklarovat i pro více funkcí zároveň b = 4 c = 2 -- datový typ se může odvodit automaticky -- není ale vždy vhodné, -- můžeme dostat zbytečně obecný typ a připravujeme se další úroveň -- kontroly x = (a + b) / c -- definice konstanty s využitím již definovaných konstant -- definice funkce: f :: Double -> Double -> Double -> Double -- typ: bere 2x Double, vrací Double f k l m = (k + l) / m -- před = uvádíme (formální) parametry, tedy proměnné, které -- se při volání nahradí za skutečné parametry -- chová se jako konjunkce, (&&) teleAsele :: Bool -> Bool -> Bool -- typ: binární funkce beroucí 2 parametry -- typu bool a vracející typ Bool -- definice podle vzoru -- definici rozdělíme na více řádků, kdy se použije -- první řádek, který se použít může -- na každém řákdu se interpretr podívá jestli může dosadit aktální -- hodnotu na místo vzoru, pokud ano řádek se použije a další se ignorují teleAsele True z = z teleAsele False _ = False -- _ používáme namísto proměnné jejíž -- hodnota nás nezajímá {- namísto definice podle vzoru můžeme použít if: teleAsele y z = if y then z else False -} {- pokud vytváříme spustitelný soubor musí obashovat funkci main - pro vstup a výstup se používají specielní funkce s nimiž se - nejsnáze manipuluje pomocí do bloku - spouštění: runhaskell - kompilace ghc -o -} main = do putStrLn "ahoj" -- vytiskne řetězec x <- getLine -- odskočení (až za do) říká, že se jedná o 1 blok -- getLine získá řetězec ze vstupu a uloží do x print (1 + (read x :: Int)) -- funkce print převede parametr -- na zobrazitelnou reprezentaci -- a dá na výstup -- read parsuje řetězec na daný typ