Vraag 1
Geef
van de volgende expressie aan wat haar type is.
filter div [1, 2, 3]
Vraag 2
Geef
aan welke van de definities NIET equivalent is aan deze definitie:
all p xs = and (map p xs)
A.
all p = and . map p
B.
all p = and (map p)
C.
all p xs = (and . map p) xs
D.
all = \p xs -> and (map p xs)
Vraag 3
Wat
is de waarde van onderstaande expressie?
filter ((/=)0) . (\x -> x`mod` 3)) [12, 10, 72, 4]
Vraag 4
Gegeven
is de functie box :: Char -> String
Wat
is het type van onderstaande expressie?
map box "De zon schijnt"
A.
[Char] -> [String]
B.
[String]
C.
[Char] -> [Char]
D.
String
Vraag 5
Wat
is de waarde van onderstaande expressie?
[ div x y | x <- [10,12,6], y <- [3..4]]
A. [3,4,2,2,3,1]
B. [0,0,0,0,0,0]
C. [3,4,2]
D. [3,2,4,3,2,1]
Vraag 6
Gegeven is het datatype:
data MyList a = Cons (MyList a) a | Nil
Wat is het type van Cons ’a’ ?
A. MyList Char
B. Char -> MyList Char
C. a -> MyList a
D. typeringsfout
Vraag 7
Schrijf
een functie die in een lijst van getallen bepaalt welk element het vaakst
voorkomt. Je mag aannemen dat de lijst niet leeg is.
vaakste :: [Int] -> Int
Vraag 8
Gegeven
is het volgende datatype:
data Boom a = Blad | Tak a (Boom a) (Boom a)
Schrijf
de functie elemBoom die kijkt
of een waarde voorkomt in een boom. Neem aan dat de waardes in de
linkerdeelboom van een tak allemaal kleiner zijn dan de waarde in de tak zelf
en de waardes in de rechterdeelboom juist groter. Maak gebruik van dat feit om
de functie efficient te maken. Schrijf ook het meest algemene type voor
deze functie op.
Vraag 9
Schrijf
length met behulp van foldr. Ofwel vul in de volgende definitie op de plekken
waar drie puntjes staan de juiste Helium code in:
length :: [a] -> Int
length = foldr ...
where ...
Vraag 10
Gegeven is een datatype om expressies mee
te representeren:
data Expr = Const Int | Var String
| Plus Expr Expr | Maal Expr Expr
Schrijf de functie eval die de waarde van een expressie
uitrekent. De waardes van de variabelen worden gegeven door de eerste parameter
die namen verbindt aan getallen:
eval :: [(String, Int)] -> Expr -> Int
Je mag aannemen dat alle variabelen die in
de expressie voorkomen een waarde krijgen in de lijst. De functie lookup komt
van pas bij het definieren van eval:
lookupBy :: (a->a->Ordering) -> a -> [(a, b)] -> Maybe b