Větvení programů

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:

Programovací styly

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í stylExpresivní styl
Pojmenovaná funkceplus x y = x + yAnonymní funkceplus = \x y -> x + y
Konstrukce wheredbl 3
where dbl x = x * x
Konstrukce letlet dbl x = x * x
in dbl 3
Vzoryf (x:xs) = x : f xs
f _ = []
Výraz casef y = case y of
(x:xs) -> x : f xs
_ -> []
Strážeg x y
| x > y = x
| x < y = y
| otherwise = 0
Výraz ifg 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.

← IB016