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.
Aka je vyhoda chvostovej rekurzie?
Chvostová rekurzia umožňuje kompilátoru znovupoužiť aktivačný záznam na zásobníku a tak stačí zásobník veľkosti O(1).
Co pouzivame na chvostovu rekurziu?
akumulator
Ako vieme skryt funkciou do definicie inej funkcie?
where
Co je to CPS (continuation passing style)?
slide 18
Daj priklad na reverse ktora je chvostovo rekurzivna a ktora neni
slide 21