meny2.html – INF3110 - Høst 2003 – Universitetet i Oslo

Ukeoppgaver i INF3110


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