Tato hodina je pouze opakovací, projdeme si témata, která byla již probírána v Úvodu do funkcionálního programování. Ty jsou výborně popsány v tutoriálu Naučte se Haskell!, do něhož můžete v případě zájmu nahlédnout:
Haskell podporuje dva základní styly psaní programu: deklarativní a expresivní. Při použití deklarativního stylu formulujeme algoritmus ve formě rovnic, které musí být splněny. V expresivním stylu skládáme složitější výrazy z jednodušších.
Deklarativní styl | Expresivní styl | ||
---|---|---|---|
Pojmenovaná funkce | plus x y = x + y | Anonymní funkce | plus = \x y -> x + y |
Konstrukce where | dbl 3 where dbl x = x * x | Konstrukce let | let dbl x = x * x in dbl 3 |
Vzory | f (x:xs) = x : f xs f _ = [] | Výraz case | f y = case y of (x:xs) -> x : f xs _ -> [] |
Stráže | g x y | x > y = x | x < y = y | otherwise = 0 | Výraz if | g x y = if x > y then x else if x < y then y else 0 |
Styly můžeme libovolně kombinovat, ale některé prostředky jazyka se k sobě hodí více. Například stráže a konstrukce where:
quadraticEquation :: (Floating a, Ord a) => a -> a -> a -> (a, a)
quadraticEquation a b c
| discriminant > 0 = ((-b + sqrt discriminant) / (2 * a),
(-b - sqrt discriminant) / (2 * a))
| otherwise = error "No solution in R."
where discriminant = b^2 - 4 * a * c
V některých případech můžeme čitelnost kódu podstatně zlepšit použitím vhodnější konstrukce. Několik zajímavých informací k tomutu tématu naleznete v článku Haskell programming tips na HaskellWiki.