Fold Flashcards
Co je to Celozrnné (wholemeal) programovanie?
znamená myslieť vo veľkom (Ralf Hinze), t.j. namiesto:
* cesty vidieť celý graf
* konkrétneho riešenia vyvinúť rámec pre riešenie problémov
* s elementami pracovať s celým zoznamom
opis foldr
foldr :: (a->b->b) -> b -> [a] -> b
slide 3
aky prvok berie ako prvy foldr?
posledny, teda ide akoby od konca (nejde pouzit na nekonecne)
opis foldl
foldl :: (b->a->b) -> b -> [a] -> b
slide 7
Aky prvok berie ako prvy foldl?
prvy
Kedy je trojica M = (S, ⊗, e) monoid?
S={x1,x2,…} je neprázdna množina,
⊗ : S × S → S je asociatívna operácia na množine S,
e ∈ S je neutrálny prvok (zľava aj sprava) vzhľadom na ⊗.
Vyslov prvu vetu o dualite foldr a foldl
slide 10
Vyslov 2 vetu o dualite foldr a foldl
slide 11
Vyslov 3 vetu o dualite foldr a foldl
slide 12
definuj foldr podla foldl
foldr f e xs= foldl (flip f) e (reverse xs)
Daj priklady dalsich identit pre foldr a foldl
slide 13
Naco su foldr1, foldl1?
Ked nevieme zvolit e, napr pri hladani maxima. Ale nepracuje na prazdnom zozname
Co robia funkcie scan?
Funkcie scan sú ako zodpovedajúce funkcie fold, ale vracajú aj zoznam všetkých medzivýsleldkov (akumulátorov).
co robi unfold?
unfoldr :: (b->Maybe (a, b))->b->[a]
aky je rozdiel medzi foldr, foldl a foldl’?
foldr nepoužíva chvostovú rekurziu
foldl má obrovské množstvo nedokončených výpočtov na halde
foldl’ - chvostová rekurzia s priebežným vyhod. akumulátora