som mal este davnejsie (teda minuly 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 robte vsade
... mozno ze nie vsetko bude uplne presne, ale priblizne ako som si zapamatal
1. definujte rekurentne funkciu reverse
reverse :: [a] -> [a]
reverse (x:xs) = reverse xs ++ [a]
2. definujte rekurentne funkciu (+-+) co bude vykonavat naslednu cinnost:
[a
1,a
2,...a
n]+-+[b
1,b
2,...b
m] = [a
1,a
2,...a
n,b
1,b
2,...b
m]
(+-+) :: [a] -> [a] -> [a]
[] +-+ ys = ys
(x:xs) +-+ ys = x : (xs +-+ ys)
3. definujte nerekurentne funkciu rv[a
1,a
2,...a
n] = [a
n,...a
2,a
1] 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 nerekurzivne 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
este aj nechapem, ze som tu napisal vsetky riesenia
... snad by to mohlo byt aj dobre, ked tak ma opravte
inac druha skupina mala nieco na styl rekurzivne a nerekurzivne map... potom sa mi vidi, ze definovat foldl (alebo foldr) a potom aj nieco so stromami aj s binarnym vyhladavacim, ale nemam sajnu co