unionL :: [[a]] -> [[a]] -> [[a]]Hou rekening met het feit dat beide input-lijsten zowel eindig als oneindig kunnen zijn.
unionL2 :: Ord a => [[a]] -> [[a]] -> [[a]]De type-constraint Ord a drukt uit dat het type a geordend is, dat wil zeggen: de predikaten (==), (<) and (>) zijn ervoor gedefinieerd.
Voorbeeld van een aanroep:
Main> take 15 (unionL2 (star "01") (star "12")) ["","0","1","2","00","01","10","11","12","21","22","000","001","010","011"]
data Bleaftree a = Leaf a | Branch (Bleaftree a) (Bleaftree a) deriving (Eq,Ord,Show)Elke knoop k in een syntactische boom bepaalt een zogenaamde deelboom: de boom die k als topknoop heeft. Geef een functie die alle deelbomen van een binaire boom oplevert. Het type is:
subtrees :: Bleaftree a -> [Bleaftree a]
psubtrees :: Bleaftree a -> [Bleaftree a]
NB: vanaf hier zijn de vragen bonusvragen.
pos :: Bleaftree a -> [[Int]]De aanroep pos example2 moet [[],[0],[1],[1,0],[1,1]] opleveren (maar het mag ook in een andere volgorde).
De aanroep atPos example2 [1] moet Branch (Leaf "kuste") (Leaf "Heleen") opleveren.
map :: (a -> b) -> [a] -> [b]Een map functie voor bladbomen (bomen met info aan de blaadjes) zou de blad informatie op dezelfde manier moeten wijzigen als de map functie voor lijsten de informatie gereprensenteerd door de elementen van de lijst. Het type van mapT en de definitie worden gegeven in de slides.
Beschouw nog eens het voorbeeld uit de slides:
example2 = Branch (Leaf "Jan") (Branch (Leaf "kuste") (Leaf "Heleen"))De aanroep mapT (map toLower) example2 levert op:
Branch (Leaf "jan") (Branch (Leaf "kuste") (Leaf "heleen"))Doe nu hetzelfde voor de rozenbomen (rose trees) uit de college-slides. Wat is het type van mapR en wat is de definitie? Beschouw het voorbeeld uit de slides:
rose = RBr [Bud 1, RBr [Bud 2, Bud 3, RBr [Bud 4, Bud 5, Bud 6]]]De aanroep mapR (+1) rose moet het volgende opleveren:
RBr [Bud 2,RBr [Bud 3,Bud 4,RBr [Bud 5,Bud 6,Bud 7]]]
Huiswerk: Tekstbestand met alle antwoorden. Let op: de laatste drie vragen zijn bonusvragen. Deadline: maandag 2 juni, 12 uur 's middags. Per email inleveren bij Arno Bastenhof, met een cc naar Jan van Eijck.