Lisp 2: Lister og funksjoner
|
|
|
- Signe Kristiansen
- 8 år siden
- Visninger:
Transkript
1 Eirik Alderslyst Nygaard Øystein Ingmar Skartsæterhagen Programvareverkstedet 11. mars 2010
2 (Lister) (Par) (Listeoperasjoner) (Assosiasjonslister)... lists are the heart of Lisp... Guy L. Steele Jr.
3 (Par) (Lister) (Par) (Listeoperasjoner) (Assosiasjonslister) (CONS lager et par (også kalt cons-celle)) (Et par pakker inn to objekter. De kan plukkes ut med CAR og CDR) (car (cons a b)) a (cdr (cons a b)) b
4 (Lister er bygget opp av par) (Par) (Listeoperasjoner) (Assosiasjonslister) (cons a (cons b (cons c nil))) (A B C) A B C (Listene i Lisp er altså enkeltlenkede lister)
5 (Induktiv definisjon av lister) (Par) (Listeoperasjoner) (Assosiasjonslister) (NIL er en liste) ((cons a b) er en liste hvis b er en liste)
6 (Par) (Listeoperasjoner) (Assosiasjonslister) (Par kan også brukes til andre ting enn lister) (Det andre argumentet til CONS må ikke være en liste) (cons a b) (a. b) (cons answer 42) (answer. 42) (Par kan for eksempel brukes til par av enkle verdier, som over, eller til vilkårlige trestrukturer)
7 (Listeoperasjoner) (Lister) (Par) (Listeoperasjoner) (Assosiasjonslister) (Det finnes mange innebygde funksjoner som opererer på lister) (Her vil vi se på noen av dem)
8 (Medlemsskap) (Lister) (Par) (Listeoperasjoner) (Assosiasjonslister) (member b (a b c)) T (member x (a b c)) NIL (MEMBER sjekker om et gitt objekt er med i en liste)
9 (Sammensetning) (Lister) (Par) (Listeoperasjoner) (Assosiasjonslister) (append (1 2) (a b c)) (1 2 A B C) (append (a b) (1 2) (e f)) (A B 1 2 E F) (append (a b) () (c)) (A B C) (APPEND tar vilkårlig mange lister som argumenter og returnerer én ny liste bestående av alle elementene fra listene den fikk)
10 (Reversering) (Lister) (Par) (Listeoperasjoner) (Assosiasjonslister) (REVERSE reverserer en liste) (reverse (a b c)) (C B A)
11 (Substituering) (Lister) (Par) (Listeoperasjoner) (Assosiasjonslister) (substitute fisk b (a b c b)) (A FISK C FISK) (SUBSTITUTE substituerer en ny verdi for alle forekomster av en gitt verdi i en liste)
12 (Utplukking av elementer) (Par) (Listeoperasjoner) (Assosiasjonslister) (first (a b c d e f g h i j)) A (second (a b c d e f g h i j)) B (third (a b c d e f g h i j)) C (fourth (a b c d e f g h i j)) D (fifth (a b c d e f g h i j)) E (sixth (a b c d e f g h i j)) F (seventh (a b c d e f g h i j)) G (eighth (a b c d e f g h i j)) H (ninth (a b c d e f g h i j)) I (tenth (a b c d e f g h i j)) J
13 (Utplukking av deler) (Lister) (Par) (Listeoperasjoner) (Assosiasjonslister) (first (a b c)) A (rest (a b c)) (B C) (last (a b c)) (C) (butlast (a b c)) (A B) (nth 2 (a b c d e f)) C (nthcdr 2 (a b c d e f)) (C D E F) (FIRST gir første element, REST resten av listen) (LAST gir siste element, BUTLAST hele listen unntatt siste) (NTH gir n-te element (nullindeksert) for en gitt n) (NTHCDR gir alt fra element n (nullindeksert) og ut)
14 (Assosiasjonslister) (Lister) (Par) (Listeoperasjoner) (Assosiasjonslister) (En assosiasjonsliste (alist) brukes for å assosiere nøkler med verdier.) (En alist er en liste av par, hvor hvert par består av nøkkel og verdi.) A 1 B 2 C 3
15 (Assosiasjonslister) (Lister) (Par) (Listeoperasjoner) (Assosiasjonslister) (ASSOC brukes for å hente ut et element fra assosiasjonslisten.) (assoc c (list (cons a 1) (cons b 2) (cons c 3))) (C. 3) (Du kan variere hva som er nøkkelen, og hvordan du vil gjøre testen ved å sende inn nøkkelordargumenter til ASSOC.)
16 (Lister) And we have learned, slowly and sometimes laboriously over the years, that while lists are the heart of Lisp, functions are the soul. Guy L. Steele Jr.
17 (Firkantsitering) (Lister) (Funksjoner er også objekter) (For å få tak i funksjonsobjektet som skjuler seg bak et navn kan vi firkantsitere det) # cons #<FUNCTION...> (Dette kan vi for eksempel bruke til å fortelle en sorteringsfunksjon hvilken funksjon som skal brukes for å sammenligne elementene:) (sort ( ) # <=) ( ) (sort ( ) # >=) ( )
18 (λ) (Lister) (lambda (x) (* x x)) #<FUNCTION...> (LAMBDA lager en funksjon) (Men er det ikke DEFUN som lager funksjoner?) (DEFUN både lager en funksjon og binder et navn til den) (LAMBDA bare lager en funksjon) (Men kan vi gjøre noe med funksjonen vi har laget?)
19 (APPLY og FUNCALL) (Lister) (apply (lambda (x) (* x x)) (4)) 16 (apply # + (4 5 6)) 15 (APPLY tar inn en funksjon og en argumentliste, og kaller funksjonen med den gitte argumentlisten) (funcall (lambda (x) (* x x)) 4) 16 (funcall # ) 15 (FUNCALL er som APPLY, men tar inn argumentene til funksjonen som separate argumenter istedenfor som en liste) (Merk at vi må bruke firkantsitering for å få tak i navngitte funksjoner)
20 (Funksjoner som opererer på funksjoner) (Vi kan skrive funksjoner som tar funksjoner som argumenter og returnerer funksjoner) (defun compose (f g) (lambda (x) (funcall f (funcall g x)))) (funcall (compose # first # rest) (a b c)) B
21 (Eksempel: Kall en funksjon på alle elementene i en liste) (defun apply-over (fun list) (if (null list) nil (cons (funcall fun (first list)) (apply-over fun (rest list))))) (apply-over # square ( )) ( ) (apply-over # first ((a b) (37))) (A 37) (FUNCALL brukes for å kalle FUN på hver element i innlisten) (Resultatene fra FUNCALL blir brukt som elementer i den nye listen) (I virkeligheten brukes MAPCAR eller MAP)
22 (Eksempel: Kollaps en liste til én verdi) (defun foldr (fun initial list) (if (null list) initial (funcall fun (first list) (foldr fun initial (rest list))))) (foldr # * 1 ( )) 24 (I virkeligheten ville man brukt REDUCE)
23 (Reformulering av funksjoner med FOLDR) (defun!* (n) (foldr # * 1 (iota 1 n))) (defun len* (list) (foldr (lambda (_ l) (1+ l)) 0 list))
24 (Høyere-ordens listefunksjoner) (mapcar # 1+ ( )) ( ) (mapcar # cons (a b) (1 2)) ((A. 1) (B. 2)) (remove-if # evenp ( )) (1 3 5) (substitute-if 42 # evenp ( )) ( )
25 (Rekursjon) (Lister) (Funksjoner som kaller seg selv er rekursive) (Rekursive funksjoner er vanlige i Lisp, og mange av funksjonene vi har sett på til nå har vært rekursive)
26 (Halekall) (Lister) (Den siste funksjonen som utføres i en annen funksjon kalles et halekall) (defun square (x) (* x x)) ; halekall av *
27 (Halerekursjon) (Lister) (Når det rekursive kallet i en funksjon er hale, sier vi at funksjonen er halerekursiv) (defun drop (n list) ; reimplementation of NTHCDR (if (= n 0) list (drop (- n 1) (rest list)))) (Fordelen med halerekursive funksjoner er at det ikke er nødvendig å holde orden på en stakk med gjenstående evaluering mens funksjonen rekurerer)
28 (Vi evaluerer en halerekursiv funksjon) (defun drop (n list) (if (= n 0) list (drop (- n 1) (rest list)))) (drop 2 (a b c)) (if (= 2 0) (a b c) (drop...)) (drop (- 2 1) (rest (a b c))) (drop 1 (b c)) (if (= 1 0) (b c) (drop...)) (drop 0 (c)) (if (= 0 0) (c) (drop...)) (C)
29 (Fordeler med halerekursjon) (Siden en halerekursiv funksjon bruker en konstant mengde plass på funksjonsstakken uansett hvor dyp rekursjonen er kan man skrive funksjoner som rekurerer vilkårlig lenge uten å sprenge stakken) (En halerekursiv funksjon utføres typisk raskere enn en ikke-halerekursiv variant, siden funksjonskallene kan optimaliseres bort) (Merk: Dette er avhengig av at kompilatoren gjør halekalloptimalisering)
30 (Det er ikke hale alt som rekurerer) (Mange funksjoner kan skrives halerekursivt, men det er ikke alltid den mest naturlige måten å uttrykke dem på) (DROP, som vi definerte over, ble hale på første forsøk) (Fakultetsfunksjonen vi definerte for en stund siden er ikke halerekursiv:) (defun! (n) (if (= n 0) 1 (* n (! (- n 1))))) (Det rekursive kallet er inni kallet til *)
31 ((! n) bruker O(n) stakkplass) (! 5) (* 5 (! 4)) (* 5 (* 4 (! 3))) (* 5 (* 4 (* 3 (! 2)))) (* 5 (* 4 (* 3 (* 2 (! 1))))) (* 5 (* 4 (* 3 (* 2 (* 1 (! 0)))))) (* 5 (* 4 (* 3 (* 2 (* 1 1))))) (* 5 (* 4 (* 3 (* 2 1)))) (* 5 (* 4 (* 3 2))) (* 5 (* 4 6)) (* 5 24) 120
32 (Omskrivning til halerekursjon) (Kan vi lage en halerekursiv fakultetsfunksjon?) (Det vanlige halerekursivifiseringstrikset er å legge til et eller flere ekstra parametre) (De nye parametrene brukes til å akkumulere verdiene som bygges opp og/eller til å holde orden på hvor langt i beregningen vi er kommet)
33 (Fakultet for halerekursivitet) (defun! (n) (if (= n 0) 1 (* n (! (- n 1))))) (defun fact-tailrec (n acc) (if (= n 0) acc (fact-tailrec (- n 1) (* n acc)))) (Den siste linjen er vrengt så det rekursive kallet kom ytterst)
34 (Oppstart av FACT-TAILREC) (defun fact-tailrec (n acc) (if (= n 0) acc (fact-tailrec (- n 1) (* n acc)))) (For å bruke FACT-TAILREC må vi passere inn en startverdi for akkumulatoren) (fact-tailrec 5 1) 120 (defun fact (n) (fact-tailrec n 1))
35 (Eksempel: Fibonacci (igjen)) (defun fib (n) (if (< n 2) 1 (+ (fib (- n 1)) (fib (- n 2))))) (FIB er ikke halerekursiv: Den gjør to rekursive kall, og +-kallet kan ikke utføres før begge disse har returnert)
36 (Eksempel: Fibonacci, halerekursiv versjon) (defun fib-rec (n i fibi fibi-1) (if (= i n) fibi (fib-rec n (1+ i) (+ fibi fibi-1) fibi))) (defun fib* (n) (if (< n 2) 1 (fib-rec n 1 1 1)))
37 (Lister) (defun fn (args... &optional optional-args... &rest rest-arg &key keyword-args...)...) (Funksjoner kan ta inn obligatoriske argumenter, valgfrie argumenter og argumenter identifisert av nøkkelord.) (Du kan også fange opp alle resterende argumenter ved bruk av &rest.) (Nøkkelordparametre må alltid komme etter alle de andre parametrene)
38 (Nøkkelord og valgfrie argumenter) (defun fn-key (&key name (age 20)) (list name age)) (defun fn-optional (&optional name (age 20)) (list name age)) (fn-key :age 41 :name "Alan") ("Alan" 41) (fn-optional "Alan" 41) ("Alan" 41) (fn-key :name "Alice") ("Alice" 20) (fn-optional "Alice") ("Alice" 20)
39 (Resterende argumenter) (defun fn-rest (mom &rest children) (list mom children)) (fn-rest "Alice") ("Alice" NIL) (fn-rest "Alice" "Bob" "Eve") ("Alice" ("Bob" "Eve")) (&rest-parameteret bindes til en liste som inneholder alle argumenter som ikke ble fanget av tidligere parametre)
40 (Oppgaver) (Oppgaver) 1 Skriv en funksjon FLIP som reverserer lister: (flip (1 2 3)) (3 2 1) 2 Er FLIP-funksjonen din halerekursiv? Hvis ikke: Kan du skrive den om til å bli det? 3 Skriv en funksjon REPEAT som kaller en funksjon gjentatte ganger til en gitt sluttverdi nås, og samler alle verdiene i en liste: (repeat # ) ( ) 4 Skriv en funksjon COLLATZ-LIST som finner Collatz-sekvensen fra et gitt naturlig tall (sekvensen med tall man får ved gjentatt anvendelse av COLLATZ til man når 1): (collatz-list 5) ( )
41 (Oppgaver) (Løsningsforslag: FLIP) (defun flip-append (list tail) (if (null list) tail (flip-append (rest list) (cons (first list) tail)))) (defun flip (list) (flip-append list nil)) (I virkeligheten ville man brukt REVERSE)
42 (Oppgaver) (Løsningsforslag: REPEAT, COLLATZ-LIST) (defun repeat (fun initial end &key (test # eql)) (if (funcall test initial end) (list end) (cons initial (repeat fun (funcall fun initial) end :test test)))) (defun collatz-list (n) (repeat # collatz n 1))
INF2810: Funksjonell Programmering. Lister og høyereordens prosedyrer
INF2810: Funksjonell programmering INF2810: Funksjonell Programmering Lister og høyereordens prosedyrer Erik Velldal Universitetet i Oslo 5. februar 2015 Agenda Forrige uke Substitusjonsmodellen og evalueringsstrategier.
Sideeekter og makroer i Lisp
Sideeekter og makroer i Lisp PVV-kurs 18. mars 2010 Oversikt over kurset (Del 4: Imperativ programmering (utsatt fra forrige kurs)) (Del 5: Makroer) (Del 6: Eksempel: Postmodern) Eirik Alderslyst Nygaard
INF2810: Funksjonell Programmering. Lister og høyereordens prosedyrer
INF2810: Funksjonell Programmering Lister og høyereordens prosedyrer Erik Velldal Universitetet i Oslo 2. februar 2017 Agenda 2 Forrige uke Substitusjonsmodellen og evalueringsstrategier. Blokkstruktur
Høyere-ordens prosedyrer
INF2810: Funksjonell programmering Høyere-ordens prosedyrer Stephan Oepen & Erik Velldal Universitetet i Oslo 8. februar, 2013 Tema 2 Forrige uke Lister og listerekursjon Høyere-ordens prosedyrer Prosedyrer
Rekursjon og lister. Stephan Oepen & Erik Velldal. 1. februar, Universitetet i Oslo
INF2810: Funksjonell programmering Rekursjon og lister Stephan Oepen & Erik Velldal Universitetet i Oslo 1. februar, 2013 Agenda 2 Forrige uke Scheme Substitusjonsmodellen Blokkstruktur Predikater Kondisjonale
INF2810: Funksjonell Programmering. Mer om verditilordning. Tabeller. Og strømmer.
INF2810: Funksjonell programmering INF2810: Funksjonell Programmering Mer om verditilordning. Tabeller. Og strømmer. Erik Velldal Universitetet i Oslo 29. mars 2016 De siste ukene: destruktive operasjoner
INF2810: Funksjonell Programmering. Mer om verditilordning. Tabeller. Og strømmer.
INF2810: Funksjonell Programmering Mer om verditilordning. Tabeller. Og strømmer. Erik Velldal Universitetet i Oslo 29. mars 2016 De siste ukene: destruktive operasjoner 2 set! endrer verditilordningen
INF2810: Funksjonell Programmering. Eksamensforberedelser
INF2810: Funksjonell Programmering Eksamensforberedelser Stephan Oepen & Erik Velldal Universitetet i Oslo 24. mai 2013 I dag 2 Kort oppsummering Praktisk om eksamen Hvem vant konkurransen om flest oblig-poeng
INF2810: Funksjonell Programmering
INF2810: Funksjonell Programmering Høyereordens prosedyrer, lambda og lokale variabler Erik Velldal Universitetet i Oslo 9. februar 2017 Tema 2 Forrige uke Lister og listerekursjon quote Høyereordens prosedyrer
INF2810: Funksjonell Programmering. Trær og mengder
INF2810: Funksjonell programmering INF2810: Funksjonell Programmering Trær og mengder Erik Velldal Universitetet i Oslo 19. februar 2015 Tema Forrige uke Høyereordens prosedyrer lambda, let og lokale variabler
INF2810: Funksjonell Programmering. Kommentarer til prøveeksamen
INF2810: Funksjonell programmering INF2810: Funksjonell Programmering Kommentarer til prøveeksamen Erik Velldal Universitetet i Oslo 1: Grunnleggende (6 poeng)? (define foo '(a b))? (define bar foo)? (set!
INF2810: Funksjonell Programmering. Lokale variabler. Og trær.
INF2810: Funksjonell Programmering Lokale variabler. Og trær. Erik Velldal Universitetet i Oslo 11. september 2019 Tema forrige uke 2 Lister som datastruktur quote Rekursjon på lister Høyereordens prosedyrer
INF2810: Funksjonell Programmering
INF2810: Funksjonell Programmering Høyereordens prosedyrer, lambda og lokale variabler Erik Velldal Universitetet i Oslo 9. februar 2017 Tema 2 Forrige uke Lister og listerekursjon quote Høyereordens prosedyrer
UNIVERSITETET I OSLO
UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i: INF2810 Eksamensdag: 5. juni, 2014 Tid for eksamen: 14:30 (4 timer) Oppgavesettet er på 4 sider. Vedlegg: Ingen Tillatte hjelpemidler:
INF2810: Funksjonell Programmering. Mer om strømmer
INF2810: Funksjonell Programmering Mer om strømmer Stephan Oepen & Erik Velldal Universitetet i Oslo 19. april 2013 Tema 2 Forrige uke Repetisjon: parallelitet Noe helt nytt: strømmer Noe quizzaktivitet
(define (naer-nok-kuberot? y x) (< (abs (- (kube y) x)) 0.001)) (define (naermere-kuberot y x) (/ (+ (* y 2) (/ x (kvadrat y))) 3))
Oppgave 1 For å komme nærmere kuberoten (tredjeroten) til et tall x fra en foreløpig tilnærming y, kan vi bruke formelen (2y + x/y 2 )/3. Skriv prosedyrene (nær-nok-kuberot? y x), (nærmere-kuberot y x)
INF2810: Funksjonell Programmering. Køer, tabeller, og (litt om) parallelitet
INF2810: Funksjonell Programmering Køer, tabeller, og (litt om) parallelitet Stephan Oepen & Erik Velldal Universitetet i Oslo 5. april 2013 Tema 2 Siste gang Kort om underveisevaluering Destruktive listeoperasjoner
INF2810: Funksjonell programmering: Mer om Scheme. Rekursjon og iterasjon.
INF2810: Funksjonell programmering: Mer om Scheme. Rekursjon og iterasjon. Stephan Oepen & Erik Velldal Universitetet i Oslo 25. januar, 2013 På blokka 2 Forrige uke Introduksjon og oversikt Funksjonell
INF2810: Funksjonell Programmering. Strømmer og utsatt evaluering
INF2810: Funksjonell Programmering Strømmer og utsatt evaluering Stephan Oepen Universitetet i Oslo 30. mars 2017 Forrige forelesning 2 Mer om (prosedyre)navn, bindinger, og verditilordning Nok en ny abstrakt
INF2810: Funksjonell Programmering
INF2810: Funksjonell Programmering Omgivelsesmodeller og destruktive listeoperasjoner Stephan Oepen & Erik Velldal Universitetet i Oslo 15. mars 2013 Tema 2 Forrige uke Representasjon av mengder Sorterte
INF2810: Funksjonell Programmering. Oppsummering og eksamensforberedelser
INF2810: Funksjonell Programmering Oppsummering og eksamensforberedelser Erik Velldal & Stephan Oepen Universitetet i Oslo 18. mai 2017 I dag 2 Kort oppsummering Praktisk om eksamen Hvem vant konkurransen
INF2810: Funksjonell Programmering
INF2810: Funksjonell Programmering Høyereordens prosedyrer, lambda og lokale variabler Stephan Oepen Universitetet i Oslo 9. februar 2015 Tema 2 Forrige uke Lister og listerekursjon quote Høyereordens
INF2810: Funksjonell Programmering. Mer om Scheme. Rekursjon og iterasjon.
INF2810: Funksjonell Programmering Mer om Scheme. Rekursjon og iterasjon. Stephan Oepen Universitetet i Oslo 26. januar 2017 På blokka 2 Forrige uke Introduksjon og oversikt Praktiske detaljer Funksjonell
INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme, del 2
INF2810: Funksjonell programmering INF2810: Funksjonell Programmering En Scheme-evaluator i Scheme, del 2 Erik Velldal Universitetet i Oslo 7. mai 2015 Tema Forrige uke SICP 4.1. Structure and interpretation
INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme
INF2810: Funksjonell Programmering En Scheme-evaluator i Scheme Erik Velldal Universitetet i Oslo 27. april 2017 Tema 2 Forrige forelesning Strømmer og utsatt evaluering Kort om makroer I dag Kap. 4 Metasirkulær
INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme, del 2
INF2810: Funksjonell Programmering En Scheme-evaluator i Scheme, del 2 Erik Velldal Universitetet i Oslo 4. mai 2017 Tema 2 Forrige uke SICP 4.1. Structure and interpretation of computer programs Metacircular
INF2810: Funksjonell Programmering. Lister og høyereordens prosedyrer
INF2810: Funksjonell Programmering Lister og høyereordens prosedyrer Stephan Oepen Universitetet i Oslo 2. februar 2016 Agenda 2 Forrige uke Substitusjonsmodellen og evalueringsstrategier Blokkstruktur
INF2810: Funksjonell Programmering. Oppsummering og eksamensforberedelser
INF2810: Funksjonell programmering INF2810: Funksjonell Programmering Oppsummering og eksamensforberedelser Erik Velldal Universitetet i Oslo 28. mai 2015 I dag Kort oppsummering Praktisk om eksamen Hvem
INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme
INF2810: Funksjonell Programmering En Scheme-evaluator i Scheme Erik Velldal Universitetet i Oslo 19. april 2016 Tema 2 Forrige uke Strømmer og utsatt evaluering Kort om makroer I dag Kap. 4 Metasirkulær
INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme, del 2
INF2810: Funksjonell Programmering En Scheme-evaluator i Scheme, del 2 Erik Velldal Universitetet i Oslo 4. mai 2017 Tema 2 Forrige uke SICP 4.1. Structure and interpretation of computer programs Metacircular
INF2810: Funksjonell Programmering. Muterbare data
INF2810: Funksjonell Programmering Muterbare data Stephan Oepen Universitetet i Oslo 15. mars 2016 Agenda Forrige uke Prosedyrebasert objektorientering Lokale tilstandsvariabler Innkapsling + set! Eksempel:
Variable Man kan bruke variable i ML. ML (kap 5 og 6) Nye datatyper INF3110/4110 INF3110/4110 INF3110/4110 INF3110/4110. Variable i ML.
ML (kap 5 og 6) Variable i ML Nye datatyper Currying Avanserte listeoperatorer Typeanalyse Variable Man kan bruke variable i ML - val = ref 1; val = ref 1 : int ref - := 3*(!)+5; val it = () : unit -!;
INF2810: Funksjonell Programmering. Oppsummering og eksamensforberedelser
INF2810: Funksjonell programmering INF2810: Funksjonell Programmering Oppsummering og eksamensforberedelser Erik Velldal & Stephan Oepen Universitetet i Oslo 31. mai 2016 I dag Kort oppsummering Praktisk
INF2810: Funksjonell Programmering. Oppsummering og eksamensforberedelser
INF2810: Funksjonell Programmering Oppsummering og eksamensforberedelser Erik Velldal & Stephan Oepen Universitetet i Oslo 31. mai 2016 I dag 2 Kort oppsummering Praktisk om eksamen Hvem vant konkurransen
INF2810: Funksjonell Programmering. Strømmer
INF2810: Funksjonell Programmering Strømmer Stephan Oepen & Erik Velldal Universitetet i Oslo 12. april 2013 Tema 2 Forrige uke Litt mer i dybden om køer Eksperiment: live-programmering Tabeller som hierarkiske
Vi skal se på lambda-uttrykk. Følgende er definerte og vil bli brukt gjennom oppgaven
SLI 230 - side 2 av 8 EKSAMENSOPPGAVE - SLI 230 - VÅR 2000 Nedenfor følger eksamensoppgaver i SLI 230. Først om oppgavene Bakerst følger to sider med hjelp slik det er avtalt - liste over primitiver fra
TDT4165 PROGRAMMING LANGUAGES. Exercise 01 Introduksjon til Oz
TDT4165 PROGRAMMING LANGUAGES Fall 2012 Exercise 01 Introduksjon til Oz Denne øvingen vil gjøre deg kjent med Emacs og Mozart. Du må kunne bruke disse verktøyene for å gjøre resten av øvingene. Mozart
INF2810: Funksjonell Programmering. En metasirkulær evaluator, del 2
INF2810: Funksjonell Programmering En metasirkulær evaluator, del 2 Stephan Oepen & Erik Velldal Universitetet i Oslo 03. mai 2013 Tema 2 Forrige uke SICP 4.1. Structure and interpretation of computer
INF2810: Funksjonell Programmering. En metasirkulær evaluator
INF2810: Funksjonell Programmering En metasirkulær evaluator Stephan Oepen & Erik Velldal Universitetet i Oslo 26. april 2013 Tema 2 Forrige uke Strømmer og utsatt evaluering Memoisering Kort om makroer
INF2810: Funksjonell Programmering. En metasirkulær evaluator, del 2
INF2810: Funksjonell Programmering En metasirkulær evaluator, del 2 Stephan Oepen & Erik Velldal Universitetet i Oslo 03. mai 2013 Tema 2 Forrige uke SICP 4.1. Structure and interpretation of computer
Rekursjon. (Big Java kapittel 13) Fra Urban dictionary: recursion see recursion. IN1010 uke 8 våren Dag Langmyhr
Fakultet Rekursjon Fibonacci Sjakk Hanois tårn Lister Oppsummering Rekursjon (Big Java kapittel 13) Fra Urban dictionary: recursion see recursion. n! = n x n-1 x n-2 x... x 2 x 1 Å beregne fakultet Den
Haskell. Kjetil Ørbekk. Programvareverkstedet, 19. mars 2009
Haskell Kjetil Ørbekk Programvareverkstedet, 19. mars 2009 Imperativ programmering Tilstand Operasjoner function uppercase(list) { x = 1 } while (x < length(list)) { uppercase(list[x]) x = x + 1 } Funksjonell
TDT4105 Informasjonsteknologi, grunnkurs. Mer om funksjoner: - rekursive funksjoner
1 TDT4105 Informasjonsteknologi, grunnkurs Mer om funksjoner: - rekursive funksjoner Pensum: 10.5 i Matlab-boka 10.1-10.4 er orienteringsstoff og ikke aktuelt til eksamen Kunnskap for en bedre verden Amanuensis
INF2810: Funksjonell Programmering. En metasirkulær evaluator
INF2810: Funksjonell Programmering En metasirkulær evaluator Stephan Oepen & Erik Velldal Universitetet i Oslo 26. april 2013 Tema 2 Forrige uke Strømmer og utsatt evaluering Memoisering Kort om makroer
Repetisjon. MAT1030 Diskret Matematikk. Oppsummering. Oppsummering. Forelesning 15: Rekursjon og induksjon. Roger Antonsen
MAT1030 Diskret Matematikk Forelesning 15: og induksjon Roger Antonsen Institutt for informatikk, Universitetet i Oslo Repetisjon 11. mars 2009 (Sist oppdatert: 2009-03-10 20:38) MAT1030 Diskret Matematikk
Rekursjon. (Big Java kapittel 13) Fra Urban dictionary: recursion see recursion. IN1010 uke 8 våren Dag Langmyhr
Fakultet Bredde Rekursjon Fibonacci Sjakk Hanois tårn Lister Oppsummering Rekursjon (Big Java kapittel 13) Fra Urban dictionary: recursion see recursion. n! = n x n-1 x n-2 x... x 2 x 1 Å beregne fakultet
INF2810: Funksjonell Programmering. Mer om Scheme. Rekursjon og iterasjon.
INF2810: Funksjonell Programmering Mer om Scheme. Rekursjon og iterasjon. Stephan Oepen Universitetet i Oslo 26. januar 2016 På blokka Forrige uke Introduksjon og oversikt Praktiske detaljer Funksjonell
INF2810: Funksjonell Programmering. Mer om Scheme. Rekursjon og iterasjon.
INF2810: Funksjonell Programmering Mer om Scheme. Rekursjon og iterasjon. Stephan Oepen Universitetet i Oslo 26. januar 2017 På blokka Forrige uke Introduksjon og oversikt Praktiske detaljer Funksjonell
INF2810: Funksjonell Programmering. Eksamensforberedelser
INF2810: Funksjonell Programmering Eksamensforberedelser Stephan Oepen & Erik Velldal Universitetet i Oslo 24. mai 2013 I dag 2 Kort oppsummering Praktisk om eksamen Hvem vant konkurransen om flest oblig-poeng
TDT4165 PROGRAMMING LANGUAGES. Exercise 02 Togvogn-skifting
TDT4165 PROGRAMMING LANGUAGES Fall 2012 Exercise 02 Togvogn-skifting Problembeskrivelse Du er sjef for å skifte vognene til et tog. Vi antar at hver vogn selv har en motor og at toget ikke har noe lokomotiv.
UNIVERSITETET I OSLO
UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i: INF2810, Funksjonell Programmering Eksamensdag: Fredag 10. juni 2016 Tid for eksamen: 14.30 Oppgavesettet er på 5 sider (ekskl.
Repetisjon: Statiske språk uten rekursive metoder (C1 og C2) Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)
Dagens tema Kjøresystemer (Ghezzi&Jazayeri.6,.7) Repetisjon Språk med rekursjon (C3) og blokker (C4) Statisk link Dynamisk allokering (C5) Parameteroverføring 1/5 Repetisjon: Statiske språk uten rekursive
Innlevering 2b i INF2810, vår 2017
Innlevering 2b i INF2810, vår 2017 Dette er del to av den andre obligatoriske oppgaven i INF2810. Man kan oppnå 10 poeng for oppgavene i 2b, og man må ha minst 12 poeng tilsammen for 2a + 2b for å få godkjent.
Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)
Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7) Repetisjon Språk med rekursjon (C3) og blokker (C4) Statisk link Dynamisk allokering (C5) Parameteroverføring 1/25 Forelesning 11 5.11.2003 Repetisjon:
"behrozm" Oppsummering - programskisse for traversering av en graf (dybde først) Forelesning i INF februar 2009
Rekursiv programmering BTeksempel Datastruktur I klassen Persontre (rotperson==) Rekursjon Noen oppgaver/problemer er rekursive «av natur» Eksempel på en rekursiv definisjon Fakultetsfunksjonen
Innlevering 2a i INF2810, vår 2017
Innlevering 2a i INF2810, vår 2017 Hovedtematikken denne gang er Huffman-koding, som ble dekket i 6. forelesning (23. februar) og i seksjon 2.3.4 i SICP. Det er viktig å ha lest denne seksjonen før dere
<?php. count tar en array som argument, og returnerer et tall som uttrykker antallet innførsler i arrayen.
Hver gang funksjonen printhallo kalles utføres instruksjonene spesifisert i den. [Kurssidene] [ ABI - fagsider bibin ] Webprogrammering høsten 2015 //funksjonskall printhallo(); //enda en gang printhallo();
Memoisering, utsatt evaluering og strømmer
Memoisering, utsatt evaluering og strømmer Først litt repetisjon: Utsatt evaluering Gitt (define (p x) (if test (x) something-else)) la E være et Scheme-uttrykk, og la L = (lambda () E). Da vil, ved kallet
NITH PG4200 Algoritmer og datastrukturer Løsningsforslag Eksamen 4.juni 2013
NITH PG4200 Algoritmer og datastrukturer Løsningsforslag Eksamen 4.juni 20 ette løsningsforslaget er til tider mer detaljert enn det man vil forvente av en eksamensbesvarelse. et er altså ikke et eksempel
Mengder, relasjoner og funksjoner
MAT1030 Diskret Matematikk Forelesning 15: og induksjon Dag Normann Matematisk Institutt, Universitetet i Oslo Mengder, relasjoner og funksjoner 9. mars 2010 (Sist oppdatert: 2010-03-09 14:18) MAT1030
