Lever precies één bestand in genaamd Prac6.hs
.
Dit bestand moet door Hugs geaccepteerd worden.
Niet alle opdrachten hieronder zijn implementatie opdrachten.
Gebruik Haskell commentaar (tekst tussen {-
en -}
)
om niet-implementatie vragen te beantwoorden en om uitleg bij de functies
te geven.
evenveel01
voor L. (Hint gebruik
de star functie uit de opdrachten van vorige week.)
nietEvenveel01
voor L.
unionL :: [String] -> [String] ->
[String]
. Zorg ervoor dat de elementen in de juiste volgorde
(naar opklimmende grootte, en bij dezelfde grootte alfabetisch
geordend) worden gegenereerd, en dat elk element maar een keer
voorkomt in het resultaat. Je mag aannemen dat de beide input lijsten
opsommingen zijn naar opklimmende grootte, en bij dezelfde grootte
alfabetisch gesorteerd. Ook bevatten de input lijsten geen
duplicaten. Hou rekening met het feit dat beide input-lijsten zowel
eindig als oneindig kunnen zijn.
Voorbeeld van een aanroep:
take 15 (unionL (star "01") (star "12"))
geeft:
["","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]
Beschouw het volgende voorbeeld uit de slides:
example2 = Branch
(Leaf "Jan")
(Branch (Leaf "kuste")
(Leaf "Heleen"))
Een voorbeeld van een aanroep: subtrees example2
geeft:
[Branch (Leaf "Jan") (Branch (Leaf "kuste") (Leaf "Heleen")),Leaf "Jan",Branch (Leaf "kuste") (Leaf "Heleen"),Leaf "kuste",Leaf "Heleen"]
tr
zijn alle
deelbomen van tr
behalve tr
zelf. Het type
is weer:
psubtrees :: Bleaftree a -> [Bleaftree a]
NB: vanaf hier zijn de vragen bonusvragen.
[]
) naar iedere knoop te
lopen. Een positie heeft type [Int]
. Definieer een functie die
bij elke binaire bladboom de lijst geeft van alle posities in die
boom. Het type is
pos :: Bleaftree a -> [[Int]]
Kijk weer naar het voorbeeld example2
uit de slides.
De aanroep pos example2
moet [[],[0],[1],[1,0],[1,1]]
opleveren (maar het mag ook
in een andere volgorde).
atPos :: Bleaftree a -> [Int] ->
Bleaftree a
die de deelboom geeft op een gegeven positie in een
boom (en een foutmelding als het eerste argument geen correcte positie
in de boom is).
De aanroep atPos example2 [1]
moet
Branch (Leaf "kuste") (Leaf "Heleen")
opleveren.
Huiswerk: Tekstbestand met alle antwoorden. Let op: de laatste twee vragen zijn bonusvragen. Deadline: maandag 15 juni, 12 uur 's middags. Per email inleveren op de gebruikelijke manier.