meny2.html – INF3110 - H?st 2003 – Universitetet i Oslo_澳门葡京手机版app下载

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