Høyere-ordens prosedyrer
|
|
|
- Judith Dahl
- 9 år siden
- Visninger:
Transkript
1 INF2810: Funksjonell programmering Høyere-ordens prosedyrer Stephan Oepen & Erik Velldal Universitetet i Oslo 8. februar, 2013
2 Tema 2 Forrige uke Lister og listerekursjon Høyere-ordens prosedyrer Prosedyrer som argumenter Anonyme prosedyrer I dag Mer om høyere-ordens prosedyrer Sekvensoperasjoner Prosedyrer som returverdi Lokale variabler Lister av lister
3 Listerekursjon og en abstraksjon 3 Ofte vil vi utføre en enkel transformasjon av hvert liste-element. Enkelt å generalisere dette mønsteret til en høyere-ordens prosedyre: (define (map proc items) (if (null? items) () (cons (proc (car items)) (map proc (cdr items))))) Vi sender med en prosedyre proc som et argument. Heter vanligvis map (en mer generell versjon er innebygd).? (map round ( )) ( )
4 lambda-uttrykk 4? (define square (lambda (x) (* x x)))? (square 4) 16? ((lambda (x) (* x x))) 4) 16? (map (lambda (x) (* x 0.1)) (2 3 4)) ( )? (map (lambda (x) (list x (* x x))) (2 3 4)) ((2 4) (3 9) (4 16)) lambda-uttrykk returnerer prosedyrer. Trenger ikke nødvendigvis bindes til et symbol; Kan kalles direkte som såkalt anonyme prosedyrer. Brukes ofte i forbindelse med høyere-ordens prosedyrer. Terminologien avslører noe av røttene...
5 lambda-uttrykk (forts.) 5 Stammer fra lambdakalkylen til Alonzo Church. Basis for all funksjonell programmering. Var på 30-tallet opptatt av mye av det samme som Alan Turing: Å lage en modell for hva beregninger er og hva som kan beregnes. Lambdakalkyle: (λx. x x)(4) Scheme: ((lambda (x) (* x x)) 4)
6 Flere høyere-ordens prosedyrer 6 Mens vi fortsetter å gjøre oss kjent med konseptet høyere-ordens prosedyrer skal vi se på noen klassiske sekvensoperasjoner: map har vi allerede sett. reduce og filter er neste.
7 reduce Sist nevnte vi et viktig punkt om å bygge opp et resultat rekursivt: Hva skal returneres når vi når basistilfellet? Avhenger av operasjonen vi bruker for å kombinere resultatene. Danner utgangspunktet for en annen klassisk høyere-ordens prosedyre:? (define (reduce proc init items) (if (null? items) init (proc (car items) (reduce proc init (cdr items)))))? (reduce + 0 ( )) 15? (reduce * 1 ( )) 120? (reduce cons () ( )) ( )? (reduce max 0 ( )) 5 7
8 reduce 8 reduce er også kjent som fold, compress, accumulate, eller inject. En måte å tenke på reduce: Vi beskrev lister som en rekursiv datastruktur i seg selv, bygget opp fra grunnverdien () med kjeder av cons-operasjoner. reduce re-kombinerer elementene med en ny operasjon og grunnverdi. (cons 1 (cons 2 (cons 3 (cons 4 (cons 5 ()))))) ( ) (+ 1 (+ 2 (+ 3 (+ 4 (+ 5 0))))) 15 (* 1 (* 2 (* 3 (* 4 (* 5 1))))) 120 (max 1 (max 2 (max 3 (max 4 (max 5 0))))) 5
9 Eksempel på bruk av map + reduce 9 Vi skal se på et kort eksempel på bruk av reduce sammen med map. Med vektorer representert som sekvenser (lister). Husk at den innebygde map tar en n-arguments prosedyre og n liste-argumenter.
10 Eksempel på bruk av map + reduce (forts.) 10 (define a (list 2 1 3)) Gitt to vektorer a = 2, 1, 3 b = 1, 3, 0 så beregnes prikk-produktet som x y = i x i y i a b = = 5 Versjon 2: Mer modulær design; kjede av høyere-ordens sekvensoperasjoner. (define b (list 1 3 0)) (define (dot-product x y) (if (null? x) 0 (+ (* (car x) (car y)) (dot-product (cdr x) (cdr y))))) (define (dot-product x y) (reduce + 0 (map * x y))) (dot-product a b) 5
11 Fjerning av elementer? (filter-odd ( )) ( )? (filter-odd ()) () (define (filter-odd items) (cond ((null? items) ()) ((odd? (car items)) (cons (car items) (filter-odd (cdr items)))) (else (filter-odd (cdr items))))) filter-odd returnerer en liste der alle partall er fjernet. Basistilfellet gir (). Tester det første elementet i lista. cons samler opp resultatet dersom elementet tester sant. Rekurserer på cdr av lista. 11
12 Muligheter for generalisering igjen 12 Igjen kan vi forestille oss et mere generelt mønster: (define (filter items)(define (filter predicate items) (cond ((null? items) ()) ((predicate (car items)) (cons (car items) (filter (cdr items))))(filter predicate (cdr it (else (filter (cdr items)))))(else (filter predicate ( Og igjen kan vi abstrahere mønsteret til en høyere-ordens prosedyre: Vi lar predicate bli et parameter.
13 filter 13? (define (filter pred items) (cond ((null? items) ()) ((pred (car items)) (cons (car items) (filter pred (cdr items)))) (else (filter pred (cdr items)))))? (filter odd? ( )) ( )? (filter even? ( )) ( ) Anvender et predikat på hvert element. Returnerer en ny liste med kun de elementene som predikatet tester sant for.? (filter (lambda (x) (and (> x 2) (< x 8))) ( )) ( )
14 Halerekursivt filter? 14 (define (filter pred items) (define (filter-iter in out) (cond ((null? in) out) ((pred (car in)) (filter-iter (cdr in) (cons (car in) out))) (else (filter-iter (cdr in) out)))) (filter-iter items ()))? (filter odd? ( )) ( )? (reverse (filter odd? ( ))) ( ) Hva med halerekursjon når vi bygger opp lister? La oss forsøke å skrive en halerekursiv versjon av filter! Hva er problemet her? Bygger opp lista bakvendt. (Vi skal komme tilbake til halerekursive listeoperasjoner nå vi introduserer destruktive operasjoner.)
15 Høyere-ordens prosedyrer del 2 Vi har så langt sett på prosedyrer som argumenter. Men vi kan øke uttrykkskraften betydelig når vi også tar med prosedyrer som returverdi. Enkelt: alt vi trenger å gjøre er å returnere et lambda-uttrykk.λ15
16 Prosedyrer som returverdi 16? (define (make-interval-test x y) (lambda (z) (and (> z x) (< z y))))? (make-interval-test 2 7) #<procedure>? (filter (make-interval-test 2 7) ( )) ( )? (filter (make-interval-test 3 6) ( )) (4 5) make-interval-test lager et predikat som vil sjekke om dens argument er innenfor et gitt intervall. lambda-uttrykket i kroppen anvendes ikke; Prosedyren som uttrykket evaluerer til er i seg selv returverdien. Så kan vi senere bruke den returnerte prosedyren som vi vil.
17 Prosedyrer som returverdi (forts.) 17? (define (make-scaler factor) (lambda (x) (* x factor)))? ((make-scaler 0.1) 10) 1.0 Returnerer en prosedyre som skalerer argumentet sitt med en gitt faktor.? (map (make-scaler -1) ( )) ( )
18 Prosedyrer som returverdi (forts.) 18 Enkel søk-og-erstatt, versjon 1:? (define (make-replacer x y) (lambda (z) (if (eqv? z x) y z)))? (map (make-replacer 42 towel)) ( )) (1 towel 2 towel 3)? (map (make-replacer 42 (0))) ( )) (1 (0) 2 (0) 3)
19 Prosedyrer inn, prosedyrer ut Enkel søk-og-erstatt, versjon 2:? (define (make-replacer pred proc) (lambda (z) (if (pred z) (proc z) z)))? (map (make-replacer (make-interval-test 40 45) (make-scaler 0.1)) ( )) ( )? (map (make-replacer odd? (lambda (x) (+ 1 x))) ( )) ( ) 19
20 Prosedyrer inn, prosedyrer ut (forts.) 20? (define (square x) (* x x))? (define (compose fn1 fn2) (lambda (x) (fn1 (fn2 x))))? (define foo (compose (make-interval-test 5 10) square))? (foo 2) #f? (foo 3) #t Et siste eksempel: compose. Setter sammen to prosedyrer til én ny. Her lager vi et nytt predikat som for et tall x sjekker om x 2 (5, 10)? (foo 4) #f
21 Lokale variabler og lambda 21 Ennå ikke ferdig med lambda for i dag. Nå skal vi se på hvordan vi kan bruke funksjonsapplikasjon med lambda for å få lokale variabler.
22 Lokale variabler og lambda (forts.) 22 I normalize kalles length én gang for hvert liste-element.? (normalize ( )) ( ) Mer effektivt om midlertidige beregninger tas vare på underveis. En måte å gjøre dette på er å definere en hjelpe-prosedyre; Argument-lista introduserer en ny lokal variabel som kan binde lengde-utregningen. Kan også gjøre det samme direkte via en anonym prosedyre. (define (normalize items) (map (lambda (x) (/ x (length items))) items)) (define (normalize items) (define (helper l) (map (lambda (x) (/ x l)) items)) (helper (length items))) (define (normalize items) ((lambda (l) (map (lambda (x) (/ x l)) items)) (length items)))
23 Lokale variabler, lambda og let 23 Behovet for lokale variabler er såpass vanlig at det finnes en kortform: let. (define (normalize items) ((lambda (l) (map (lambda (x) (/ x l)) items)) (length items))) (define (normalize items) (let ((l (length items))) (map (lambda (x) (/ x l)) items)))
24 Lokale variabler, lambda og let 24 Generell form for let Ekvivalent lambda-uttrykk (let (( var1 exp1 ) ( var2 exp2 ). ( varn expn )) body ) ((lambda ( var1 var2... varn ) body ) exp1 exp2... expn ) Vi ser at rekkevidden til variablene er kroppen til let-uttrykket, og at verdiene beregnes utenfor let-uttrykket. Variablene har ikke tilgang til hverandre under bindingen.
25 Noen eksempler med let? (define foo 42)? (let ((x foo) (y 1)) (list x y)) (42 1)? (let ((x foo) (y x)) (list x y)) error: x undefined? (let ((x foo) (y foo)) (list x y)) (42 42)? (let ((foo 7) (y foo)) (list foo y)) (7 42)? (let ((foo 7)) (let ((y foo)) (list foo y))) (7 7)? (let* ((foo 7) (y foo)) (list foo y)) (7 7) 25
26 Lokale variabler, lambda og let* 26 Generell form for let* Ekvivalent lambda-uttrykk (let* (( var1 exp1 ) ( var2 exp2 ). ( varn expn )) body ) ((lambda ( var1 ) ((lambda ( var2 ) ((lambda ( varn ) body ) expn )) exp2 )) exp1 ) Mens let binder variablene parallelt så gjør let* det sekvensielt. let* er en kortform for flere omsluttende let- eller lambda-uttrykk.
27 Lister som sekvenser 27 Så langt ha vi sett på lister som sekvenser. Kjeder av cons-par der siste elementet er den tomme lista; ().? (cons 1 (cons 2 (cons 3 (cons 4 ()))))) ( ) Rekursiv struktur; en liste er enten () eller et par der cdr er en liste.
28 Lister av lister 28 Hvert liste-element kan selv være en liste... Som igjen kan bestå av nye lister.? (cons (list 1 2) (list 3 4)) ((1 2) 3 4)
29 Lister som trær 29 Lister av lister kan sees som trær: Hvert element i en liste er en gren. Elementer som selv er lister er subtrær. Løvnodene i treet er de atomære elementene som ikke er lister.
30 Rekursjon på lister av lister 30 Rekursjon på lister av lister: Må passe på at rekursjonen går ned i hver liste. map er definert for lister; tree-map er definert for lister av lister:? (define (tree-map proc tree) (cond ((null? tree) ()) ((pair? tree) (cons (tree-map proc (car tree)) (tree-map proc (cdr tree)))) (else (proc tree))))? (tree-map square ((1 2) 3 4)) ((1 4) 9 16)? (tree-map square (((1 2) ((3))) (4))) (((1 4) ((9))) (16))
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.
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
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
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
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. 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
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. 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. 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. 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. 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
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. 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. 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: 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. 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
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 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 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 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 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, 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. 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. 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
INF2810: Funksjonell Programmering. Huffman-koding
INF2810: Funksjonell Programmering Huffman-koding Stephan Oepen & Erik Velldal Universitetet i Oslo 22. februar, 2013 Tema 2 Forrige uke Data-abstraksjon Lister av lister Tre-rekursjon Prosedyrer som datastruktur
INF2810: Funksjonell Programmering. Huffman-koding
INF2810: Funksjonell Programmering Huffman-koding Stephan Oepen & Erik Velldal Universitetet i Oslo 22. februar, 2013 Tema 2 Forrige uke Data-abstraksjon Lister av lister Tre-rekursjon Prosedyrer som datastruktur
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
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. 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. 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
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
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. 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:
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
(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. 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. 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 2 Forrige uke Introduksjon og oversikt Praktiske detaljer Funksjonell
INF2810: Funksjonell programmering: Introduksjon
INF2810: Funksjonell programmering: Introduksjon Stephan Oepen & Erik Velldal Universitetet i Oslo 18. januar, 2013 Tema for i dag 2 Introduksjon Praktiske detaljer Pensum Obliger Lærebok Hva skal vi lære?
INF2810: Funksjonell Programmering. Huffman-koding
INF2810: Funksjonell Programmering Huffman-koding Stephan Oepen Universitetet i Oslo 1. mars 2016 Tema 2 Sist Trær som lister av lister Trerekursjon Mengder som trær I dag Hierarkisk og symbolsk data Eksempel:
Lisp 2: Lister og funksjoner
Eirik Alderslyst Nygaard Øystein Ingmar Skartsæterhagen Programvareverkstedet 11. mars 2010 (Lister) (Par) (Listeoperasjoner) (Assosiasjonslister)... lists are the heart of Lisp... Guy L. Steele Jr. (Par)
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
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
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.
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.
INF2810: Funksjonell programmering: Introduksjon
NF2810: Funksjonell programmering: ntroduksjon Stephan Oepen & Erik Velldal Universitetet i Oslo 18. januar, 2013 Tema for i dag 2 ntroduksjon Praktiske detaljer Pensum Obliger Lærebok Hva skal vi lære?
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
INF2810: Funksjonell Programmering. Huffman-koding
INF2810: Funksjonell Programmering Huffman-koding Erik Velldal Universitetet i Oslo 23. februar 2017 Tema 2 Sist Trær som lister av lister Trerekursjon Mengder som trær Dataabstraksjon I dag Hierarkisk
Par og Lister (først et par sider fra forrige uke) Par er byggestener for lister og trær og sammensatte datatyper.
Par og Lister (først et par sider fra forrige uke) Par er byggestener for lister og trær og sammensatte datatyper. Par kan representeres grafiske slik: Som vi ser kan vi bruke cons til å lage par hvis
INF2810: Funksjonell Programmering. Huffman-koding
INF2810: Funksjonell Programmering Huffman-koding Stephan Oepen Universitetet i Oslo 1. mars 2016 Tema 2 Sist Trær som lister av lister Trerekursjon Mengder som trær I dag Hierarkisk og symbolsk data Eksempel:
INF Gruppelærerenes side
INF2810 - Gruppelærerenes side Lars Tveito March 3, 2015 Contents Oversikt Dette siden er ment som et hjelpemiddel for oppgaveløsning, og inneholder også litt informasjon om gruppetimene. Det er skrevet
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
Binære søketrær. En ordnet datastruktur med raske oppslag. Sigmund Hansen
Binære søketrær En ordnet datastruktur med raske oppslag Sigmund Hansen Lister og trær Rekke (array): 1 2 3 4 Lenket liste (dobbelt-lenket): 1 2 3 4 Binært søketre: 3 1 4 2 Binære
Oppgave 1 Minimum edit distance
INF-2810 V 2012 Oppgavesett 10, kalenderuke 12. Oppgave 1 Minimum edit distance Vi vil finne det minste antall redigeringsoperasjoner som kreves for å komme fra strengen A til strengen B. Strengene oppgis
INF2810: Funksjonell Programmering. Huffman-koding
INF2810: Funksjonell Programmering Huffman-koding Erik Velldal Universitetet i Oslo 23. februar 2017 Tema 2 Sist Trær som lister av lister Trerekursjon Mengder som trær Dataabstraksjon I dag Hierarkisk
Symbolske data SICP 2.3
Symbolske data SICP 2.3 Vi har så langt alt vesentlig sett på tall enkeltstående tall, talluttrykk, og lister og trær med tall. Et av målene for John McCarthy (opphavsmannen til Lisp) var å lage et språk
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
