• No results found

Functioneel Programmeren (INFOFP) 6 april 2004

N/A
N/A
Protected

Academic year: 2021

Share "Functioneel Programmeren (INFOFP) 6 april 2004"

Copied!
3
0
0

Bezig met laden.... (Bekijk nu de volledige tekst)

Hele tekst

(1)

Informatica Instituut, Faculteit Wiskunde en Informatica, UU.

In elektronische vorm beschikbaar gemaakt door de TBC van A−Eskwadraat.

Het college INFOFP werd in 2003/2004 gegeven door Johan Jeuring.

Functioneel Programmeren (INFOFP) 6 april 2004

Opgave 1 (7 punten)

Geef van de volgende expressie aan wat haar type is. Vergeet overloading en neem aan dat getallen simpelweg van het type Int zijn.

map div [1, 2, 3]

a) [Int -> Int]

b) [Int]

c) [Int] -> [Int]

d) typefout

Opgave 2 (7 punten)

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 xs = (and . map p) xs c) all p = and (map p)

d) all = \p xs -> and (map p xs)

Opgave 3 (7 punten)

Wat is de waarde van de onderstaande expressie?

map ((/= 0) . (`mod` 3)) [12, 10, 72, 4]

a) [12, 72]

b) [False, True, False, True]

c) [True, False, True, False]

d) [10, 4]

(2)

Opgave 4 (7 punten)

Gegeven zijn de types van sequence en putChar:

sequence :: [IO a] -> IO [a]

putChar :: Char -> IO ()

Wat is het type van onderstaande expressie?

sequence (map putChar "De zon schijnt") a) IO [a]

b) IO [()]

c) [IO ()]

d) [Char] -> [IO ()]

Opgave 5 (15 punten)

Schrijf een functie die regels inleest (gebruik makend van getLine :: IO String) totdat de gebruiker een lege regel invoert. De functie heeft een IO type en levert de ingelezen regels inclusief de lege op: getLines :: IO [String]

Opgave 6 (15 punten)

Schrijf een functie die de index van het laatste voorkomen van een element in een lijst oplevert.

Indices beginnen bij nul. Bijvoorbeeld: lastIndexOf 3 [1,2,3,5,3,2,1] geeft 4. Je mag aan- nemen dat het element voorkomt in de lijst. Schrijf een zo algemeen mogelijk type op bij deze functie.

Bonus: Als het je lukt om deze functie helemaal met standaardfuncties (en dus zonder recursie) te schrijven, dan krijg je 5 bonuspunten. Daarmee kun je in principe boven de 10 uitkomen voor deze toets. Het eindcijfer van het vak kan echter niet meer dan een 10 zijn.

Opgave 7 (10 punten)

Gegeven is het datatype Boom en de functie foldBoom:

data Boom a = Blad a | Tak (Boom a) (Boom a)

foldBoom :: (a -> b) -> (b -> b -> b) -> Boom a -> b foldBoom blad tak (Blad x) = blad x

foldBoom blad tak (Tak links rechts) =

tak (foldBoom blad tak links) (foldBoom blad tak rechts)

Schrijf met behulp van foldBoom een functie die het aantal bladeren in een Boom bepaalt:

aantal :: Boom a -> Int

(3)

Opgave 8 (8 punten)

Gegeven is het datatype om breuken mee te representeren:

data Getal = Breuk Int -- teller Int -- noemer

Schrijf een instantie (instance) van de klasse Eq voor dit type waarbij breuken gelijk zijn volgens de normale wiskundige definities. Bijvoorbeeld twee derde (23) is gelijk aan vier zesde (46).

Opgave 9 (20 punten)

a) Gegeven zijn onderstaande definities van diverse functies. Bewijs met inductie dat de vol- gende gelijkheid geldt:

foldr f u . map g = foldr (f . g) u

Schrijf per herschrijfstap de rechtvaardiging op. (16 punten)

map :: (a -> b) -> [a] -> [b]

map f [] = []

map f (x:xs) = f x : map f xs

(.) :: (b -> c) -> (a -> b) -> (a -> c) (.) f g x = f (g x)

foldr :: (a -> b -> b) -> b -> [a] -> b foldr op unit [] = unit

foldr op unit (xLxs) = x ‘op‘ foldr op unit xs

b) Leg in hooguit 4 regels uit waarom een wet zoals bovenstaande handig kan zijn. (4 punten)

Referenties

GERELATEERDE DOCUMENTEN

(b) (5 punten) Op hoeveel manieren kan ik deze boeken op een boekenplank zetten zodanig dat alle boeken per onderwerp bij elkaar staan?. (Dus de wiskunde boeken bij

Je hoeft ook de functies voor sequenti¨ ele compositie (<*>), keuze (<|>), voor de lege string (pSucceed) en voor een enkel symbool (pSym) niet zelf te defini¨ eren.

Woorden mogen niet afgebroken worden, en de lengte van het langste woord is hoogstens de meegegeven

a) De functie foldl gebruikt altijd minder ruimte dan foldr.. b) De functie foldr kan al een stukje van een resultaat opleveren als het lijstargument nog niet helemaal

The exam consists of 4 multiple choice questions (1 point each) and 2 open questions (3 points each)... The text field contains a number that is increased when the button

The exam consists of three open questions (2 points each) and 4 multiple choice questions (1 point each)..

The exam consists of two open questions (2 points each) and 6 multiple choice questions (1 point each).. Therefore, guessing is

Schrijf een functie filterBoom, die, gegeven een predicaat en een Boom, alle bladeren die niet voldoen aan het predicaat vervangt door de lege Boom. Takken en bladeren die wel aan