funkcie, chvostová rekurzia Flashcards
Ako funguju guards?
factorial n|n<2 =1
|otherwise = n * factorial (n - 1)
Co je otherwise?
Konstanta pre True
Co su to incomplete patterns?
Neprejdeme vsetky mozne inputy pattern matchingom
Co vieme pouzit na “error navrat”?
undefined
error “error msg”
Maybe (Just/nothing)
Opis case notaciu
slide 8
Aky davame posledny vzor pre case?
_
Co je to dolnik?
Ked ho snazime s niecim porovnat tak to vrati dolnika
Co je to opakovanie neaonymnej premennej
f [x,x] = x a pod
Ako funguje @ as-pattern?
rastie (x:xs@(h:t)) = x < h && rastie xs
Opis let-vyraz
Umožňuje definovať spoločné podvýrazy pre použitie v inom výraze:
let {- väzby -} in {- výraz -}
in je to co je vysledok, let su medzipremenne
Co robi where?
Umožňuje definovať spoločné podvýrazy pre viacero podmienok porovnávania so vzorom:
slide 13
Co je problem pri rekurzii?
Casto treba zasobnik velkosti O(n)
Co je to chvostove volanie?
Hovoríme, že volanie funkcie g vo funkcii f je chvostové volanie (tail call) práve vtedy, ak toto volanie je posledným krokom vo výpočte f a výsledok volania funkcie g je teda priamo výsledkom funkcie f .
Daj priklad na chvostove a nechvostove volania
chvostové volania (g vo funkcii f ):
* f x = g (x - 1)
* f x = if (h x) then g (x - 1) else 0
nechvostové volania:
* f x = h (g (x - 1))
* f x = (g (x - 1)) + 1
Co je to chvostova rekurzia?
Rekurzívna funkcia f využíva chvostovú rekurziu (tail recursion)
práve vtedy, ak všetky rekurzívne volania f sú chvostové volania.