toto som mala uložené v adresáriku čo bolo minulé roky a toto sme mali na skúške aj my, takže mi stačilo to vedieť:
som mal este davnejsie (teda teraz v piatok) niekde uvadzam aj riesenia ked ma kopne muza a radsej typove definicie robte vsade, neviem kde to bolo priamo v zadani napisane aby sa robili, ale rob vsade
1. definujte rekurentne funkciu reverse
reverse :: [a] -> [a]
reverse (x:xs) = reverse xs ++
2. definujte nerekurentne funkciu (+-+) co bude vykonavat naslednu cinnost:
[a1,a2,...an]+-+[b1,b2,...bm] = [a1,a2,...an,b1,b2,...bm]
(+-+) :: [a] -> [a] -> [a]
[] +-+ y = y
(x:xs) +-+ ys = x : (xs +-+ ys)
3. definujte nerekurentne funkciu rv[a1,a2,...an] = [an,...a2,a1] pomocou funkcie foldr a lokalne definovanou funkciou op
(je to vlastne funkcia reverse ale tu odporucam davat pozor, lebo to co sa nachadza v prelude.hs je definovane cez foldl... pomocka> nemozete pouzit operator ":" )
rv :: [a] -> [a]
rv [] = []
rv (x:xs) = foldr op [] (x:xs)
where
op a b = b ++ [a]
4. definujte rekurzivne funkciu foldl1 pomocou funkcie foldl
foldl1 :: (a -> a -> a) -> [a] -> a
foldl1 f (x:xs) = foldl f x xs
5. definujte funkciu f ak plati:
g = map f
pricom g ma na vstupe zoznam napriklad ["Ahoj","Pes",Bratislava"] a vrati vam ho ako [(4,"Ahoj"),(3,"Pes"),(10,"Bratislava")] ... cize vypocita pocet prvkov a da to do dvojic... zaroven treba urcit este aj vseobecnu typovu definiciu funkcie g
g :: [[a]] -> [(Int,[a])]
f :: [a] -> (Int,[a])
f xs = (length xs, xs)
6. vytvorte funkciu (dajme tomu, ze) strom ktora vrati binarny strom rovnakej dlzky na vsetkych vetvach ak na vstupe je zoznam cisel ktorych pocet je n^2... pricom strom bude tvaru nejak Btree a = Bin (Tip a) (Tip a) ... (tam to bolo dlhsie zadanie este)
data Btree a = Tip a | Bin (Btree a) (Btree a)
strom :: [a] -> Btree
strom [a] = Tip a
strom xs = Bin (strom us) (strom ps)
where
us = take len xs
ps = drop len xs
len = (length xs) 'div' 2
to je vsetko ... nerucim vsak uplne za nic
definujte fciu map - rekurzivne aj neviem ako
def. fciu foldl1
def. fciu concat - cez (++) - neviem o co islo
definujte binarny strom + priklad na vypis cohosi
definujte binarny vyhladavaci strom + priklad na vypis cohosi
1.map rekurzivne +typova def
2.map nerekurzivne <mnozinovou abstrakciou>+typova def.
3.reverse rekurzivne +typ def
4.reverse nerek. (mnoz abst.) + typ.def
5.g=map f ..napisat najvseobecnejsiu typ def.:
[[1,2],[2,3]]=[(1,[1,2]),(2,[2,3])]
b) napisat ako vyzera funkcia f
6.nadefinujte strom a vytvor funkciu zadaj ztrom::Strom->Int->String
(zapis ho takto: (U(L1)(U(L3)(L2))
definujte funkicu (+-+), ktora urobi nasledovne: [a1 a2 ....an] (+-+) [b1 b2....bm]=[a1 a2 ...an b1 b2 ....bm] ( v podstate zretazenie zoznamov... )
funkciu reverze nerekurzivne pomocou foldr .... funckiu foldl1 nerekurzivne ( pomocou foldl ) ...
potom binarny strom tam bol urcite..
a este taka sranda, ze g= map f... pricom funckia f robila to, ze vsutpu string dala na vyspute dvojicu (int ,string), kde int bola dlzka stringu..
. definovat binarny strom BTree
a definovat fciu ktora "naseka" do bin. stromu zoznam takymto sposobom...
taze napr. [ x ]=[1,2,3,4]
bude ASI: Bin(Bin(Tip 1)(Tip 2)) (Bin(Tip 3)(Tip 4)) ..............skoda ze to nemozem nakreslit...
ale viem ze v druhej skupine bolo aj definovat vyhladavaci binarny strom ci aky ale fcie neviem ake boli...
to je asi tak na 80% co bolo bo uz nepamatam uplne presne len princ