INF3110/4110
Ukeoppgaver uke 40 (1.-3.10.2003)
Oppgave 1
---------
Uttrykk f�lgende funksjoner ved fn-uttrykk:
fun kvadrat (x) : real = x * x;
fun concat (x, y) = x ^ y;
fun cons x y = x :: y;
Eksempel: Funksjonen
fun plussto x = x + 2;
kan uttrykkes ved uttrykket
fn x => x + 2
Definer funksjonene over ved � bruke val i stedet for fun.
Oppgave 2
---------
Er det noen praktisk forskjell p� disse to deklarasjonene av funksjonen f?
(Vi antar at funksjonen g og en curriert funksjon h er gitt fra f�r.)
(A) fun f x y = h (g x) y;
(B) fun f x = h (g x);
Oppgave 3
---------
Bruk let til � skrive en funksjon
fun hundre (x:real) = ...
som tar et reelt tall x og returnerer x^100. (Dvs. x i 100de potens
eller produktet (x * ... * x) med hundre x'er.) Du har bare lov til �
bruke let-konstruksjonen og gange-operatoren.
Oppgave 4
---------
Lag en funksjon
fun lagfunksjoner (ls : int list) = ...
som tar en liste med heltall [x1, x2, x3, ... ] og som returner en
liste med funksjoner [f1, f2, f3, ...]. Hvert tall x fra den
opprinnelige listen skal gi en funksjon som tar y som argument og
returnerer (x + y). F.eks. skal f2(y) gi verdien (x2 + y).
Eksempel: lagfunksjoner([1,2,3]) gir en liste med tre funksjoner. Den
f�rste funksjonen legger til 1, den andre legger til 2 og den tredje
legger til 3.
Lag en funksjon
fun appliser (ls : (int -> int) list) (x : int) = ...
som tar en slik liste av funksjoner [f1, f2, f3, ...] og et heltall n
og som returnerer listen [f1(n), f2(n), f3(n), ...] av heltall.
Eksempel:
(appliser (lagfunksjoner [1,2,3]) 10) gir listen [11,12,13]
(appliser [fn x=> x*x*x] 10) gir listen [1000];
Oppgave 5
---------
�velser i bruk av foldl og foldr.
Husk hvordan disse funksjonene virker:
foldl f d [x1, x2, ..., xn] gir f(xn, ... f(x2, f(x1,d)))
foldr f d [x1, x2, ..., xn] gir f(x1, f(x2, ... ,f(xn,d)))
Ved � bruke disse sammen med passende f og d, definer f�lgende funksjoner:
flatten - tar en liste av lister og "flater den ut"
Eks. flatten [["a"], ["b", "c", "d"], ["e", "f"]] gir ["a","b","c","d","e","f"]
reverser - som reverserer en liste
Eks. reverser [1,2,3,4,5] gir [5,4,3,2,1]
lengde - som returnerer antall elementer i en liste
Eks. lengde ["b", "c", "d"] gir 3