INF2810: Funksjonell Programmering
|
|
- Esther Hjelle
- 6 år siden
- Visninger:
Transkript
1 INF2810: Funksjonell Programmering Omgivelsesmodeller og destruktive listeoperasjoner Stephan Oepen & Erik Velldal Universitetet i Oslo 15. mars 2013
2 Tema 2 Forrige uke Representasjon av mengder Sorterte lister og binære trær Lokal tilstand og assignment Prosedyrebasert objektorientering
3 Tema 2 Forrige uke Representasjon av mengder Sorterte lister og binære trær Lokal tilstand og assignment Prosedyrebasert objektorientering I dag The whole truth: omgivelser Destruktive listeoperasjoner Data-identitet vs. -ekvivalens
4 Representasjon av mengder: Binærtrær 3 Enda mer effektivt: {1, 3, 5, 7, 9, 11} som binærtre med ordnede noder. Hver node lagrer et element en venstre-gren med mindre elementer en høyre-gren med større elementer
5 Representasjon av mengder: Binærtrær 3 Enda mer effektivt: {1, 3, 5, 7, 9, 11} som binærtre med ordnede noder. Hver node lagrer et element en venstre-gren med mindre elementer en høyre-gren med større elementer Ved søk etter et gitt element x: Hvis x er mindre enn node-oppslaget, søk til venstre. Hvis x er større, søk til høyre. Kan halvere søkerommet i hvert trinn: Logaritmisk vekst; O(log n). Må være litt obs på å holde treet (noenlunde) balansert.
6 Trær som lister og mengdeoperasjoner for binærtrær 4 To abstraksjonsbarrier (abstrakte datatyper) som bygger på hverandre: (define (make-tree entry left right) (list entry left right)) (define (tree-entry tree) (car tree)) (define (tree-left-branch tree) (cadr tree)) (define (tree-right-branch tree) (caddr tree))
7 Trær som lister og mengdeoperasjoner for binærtrær 4 To abstraksjonsbarrier (abstrakte datatyper) som bygger på hverandre: (define (make-tree entry left right) (list entry left right)) (define (tree-entry tree) (car tree)) (define (tree-left-branch tree) (cadr tree)) (define (tree-right-branch tree) (caddr tree)) (define (element-of-set? x set) (cond ((null? set) #f)
8 Trær som lister og mengdeoperasjoner for binærtrær 4 To abstraksjonsbarrier (abstrakte datatyper) som bygger på hverandre: (define (make-tree entry left right) (list entry left right)) (define (tree-entry tree) (car tree)) (define (tree-left-branch tree) (cadr tree)) (define (tree-right-branch tree) (caddr tree)) (define (element-of-set? x set) (cond ((null? set) #f) ((= x (tree-entry set)) #t)
9 Trær som lister og mengdeoperasjoner for binærtrær 4 To abstraksjonsbarrier (abstrakte datatyper) som bygger på hverandre: (define (make-tree entry left right) (list entry left right)) (define (tree-entry tree) (car tree)) (define (tree-left-branch tree) (cadr tree)) (define (tree-right-branch tree) (caddr tree)) (define (element-of-set? x set) (cond ((null? set) #f) ((= x (tree-entry set)) #t) ((< x (tree-entry set)) (element-of-set? x (tree-left-branch set)))
10 Trær som lister og mengdeoperasjoner for binærtrær 4 To abstraksjonsbarrier (abstrakte datatyper) som bygger på hverandre: (define (make-tree entry left right) (list entry left right)) (define (tree-entry tree) (car tree)) (define (tree-left-branch tree) (cadr tree)) (define (tree-right-branch tree) (caddr tree)) (define (element-of-set? x set) (cond ((null? set) #f) ((= x (tree-entry set)) #t) ((< x (tree-entry set)) (element-of-set? x (tree-left-branch set))) ((> x (entry set)) (element-of-set? x (tree-right-branch set)))))
11 Tid og tilstand 5 Så langt ren funskjonell programmering: prosedyrer som funksjonelle (dvs. matematiske) transformasjoner av data; statisk over tid. Semantikken til et uttrykk er uavhengig av hvor og når det brukes. Gir stor grad av gjennomsiktighet (referential transparency).
12 Tid og tilstand 5 Så langt ren funskjonell programmering: prosedyrer som funksjonelle (dvs. matematiske) transformasjoner av data; statisk over tid. Semantikken til et uttrykk er uavhengig av hvor og når det brukes. Gir stor grad av gjennomsiktighet (referential transparency). Fra kapittel 3 i SICP tar vi høyde for at uttrykk (og objekter ) kan inngå i en omgivelse som forandrer seg over tid. Sentrale konsepter: tilstand (state) og tilordning (assignment). Gir oss en form for (prosedyre-basert) objekt-orientering. Viktig teknikk for å organisere programmer: vi kan opprette objekter i programmene våre som tilsvarer entiteter i verden vi ønsker å modellere. Atferden avhenger av egenskaper som kan forandre seg over tid.
13 For eksempel: bankkonto 6 (define (make-withdraw initial) (let ((balance initial)) (lambda (amount) (cond ((>= balance amount) (set! balance (- balance amount)) balance) (else "Insufficient funds")))))? (make-withdraw 100) #<procedure>? (define w1 (make-withdraw 100))? (define w2 (make-withdraw 200))? (w1 50) 50? (w2 50) 150 Vi representerer kontoobjekter som prosedyrer. make-withdraw: En prosedyre for å generere nye konto-objekter. Returnerer en anonym prosedyre som innkapsler sin egen saldo-variabel: w1 og w2 er distinkte objekter, med distinkte lokale tilstandsvariabler. innkapsling kalles gjerne for closure utenfor SICP.
14 Destruktive operasjoner 7 I kapittel 3 i SICP tok vi et stort skritt: Med set! bryter vi med ren funksjonell programmering og introduserer elementer fra imperativ programmering: Verditilordning og tilstandsendring som modifiserer objekter. Kalles i noen sammenhenger fra et funksjonelt perspektiv for destruktive operasjoner. Når vi endrer tilstanden til et objekt destruerer vi det siden det ikke lenger representerer samme verdi. Til nå har vi kunnet tenke på variabler som navn på verdier. Fra nå må vi tenke på variabler som steder man kan lagre verdier. Bankkonto er en muterbar objekt, med både identitet og tilstand.
15 Prosedyre-basert objektorientering og message passing 8 (define (make-account) (let ((current 0)) (define (deposit amount) (set! current (+ current amount))) (define (withdraw amount) (deposit (- amount))) (define (balance) current) (define (dispatch message) (cond ((eq? message deposit) deposit) ((eq? message withdraw) withdraw) ((eq? message balance) balance))) dispatch))
16 Prosedyre-basert objektorientering og message passing 8 (define (make-account) (let ((current 0)) (define (deposit amount) (set! current (+ current amount))) (define (withdraw amount) (deposit (- amount))) (define (balance) current) (define (dispatch message) (cond ((eq? message deposit) deposit) ((eq? message withdraw) withdraw) ((eq? message balance) balance))) dispatch))? (define erik (make-account))? (define oe (make-account))? ((oe deposit) 100)? ((oe balance))
17 Prosedyre-basert objektorientering og message passing 8 (define (make-account) (let ((current 0)) (define (deposit amount) (set! current (+ current amount))) (define (withdraw amount) (deposit (- amount))) (define (balance) current) (define (dispatch message) (cond ((eq? message deposit) deposit) ((eq? message withdraw) withdraw) ((eq? message balance) balance))) dispatch))? (define erik (make-account))? (define oe (make-account))? ((oe deposit) 100)? ((oe balance)) 100? ((erik balance))
18 Prosedyre-basert objektorientering og message passing 8 (define (make-account) (let ((current 0)) (define (deposit amount) (set! current (+ current amount))) (define (withdraw amount) (deposit (- amount))) (define (balance) current) (define (dispatch message) (cond ((eq? message deposit) deposit) ((eq? message withdraw) withdraw) ((eq? message balance) balance))) dispatch))? (define erik (make-account))? (define oe (make-account))? ((oe deposit) 100)? ((oe balance)) 100? ((erik balance)) 0
19 Prosedyre-basert objektorientering og message passing 8 (define (make-account) (let ((current 0)) (define (deposit amount) (set! current (+ current amount))) (define (withdraw amount) (deposit (- amount))) (define (balance) current) (define (dispatch message) (cond ((eq? message deposit) deposit) ((eq? message withdraw) withdraw) ((eq? message balance) balance))) dispatch))? (define erik (make-account))? (define oe (make-account))? ((oe deposit) 100)? ((oe balance)) 100? ((erik balance)) 0 Hvorfor kan vi ikke uten videre forenkle til f.eks. (oe deposit 100)?
20 På sidespor: dotted pairs vs. lister 9 Hvordan Scheme viser cons-celler:? (cons 1 2) (1. 2)? (cons 1 (cons 2 ())) (1 2)? (cons (list 1 2) 3)
21 På sidespor: dotted pairs vs. lister 9 Hvordan Scheme viser cons-celler:? (cons 1 2) (1. 2)? (cons 1 (cons 2 ())) (1 2)? (cons (list 1 2) 3) ((1 2). 3)
22 På sidespor: dotted pairs vs. lister 9 Hvordan Scheme viser cons-celler:? (cons 1 2) (1. 2)? (cons 1 (cons 2 ())) (1 2)? (cons (list 1 2) 3) ((1 2). 3) I bunnen er (1 2 3) en cons-kjede (1. (2. (3. ()))); Er cdr-verdien et par sløyfer Scheme punktum og parentes:. (.
23 På sidespor: dotted pairs vs. lister 9 Hvordan Scheme viser cons-celler:? (cons 1 2) (1. 2)? (cons 1 (cons 2 ())) (1 2)? (cons (list 1 2) 3) ((1 2). 3) I bunnen er (1 2 3) en cons-kjede (1. (2. (3. ()))); Er cdr-verdien et par sløyfer Scheme punktum og parentes:. (.? (1. (2. (3. ())))
24 På sidespor: dotted pairs vs. lister 9 Hvordan Scheme viser cons-celler:? (cons 1 2) (1. 2)? (cons 1 (cons 2 ())) (1 2)? (cons (list 1 2) 3) ((1 2). 3) I bunnen er (1 2 3) en cons-kjede (1. (2. (3. ()))); Er cdr-verdien et par sløyfer Scheme punktum og parentes:. (.? (1. (2. (3. ()))) (1 2 3) Dermed kan vi skrive prosedyrer som tar et variabel antall argumenter: (define (map fn. lists)...)
25 Polyadiske prosedyrer 10 (define (n-ary-append. lists) (define (recurse lists) (if (null? lists) () (append (car lists) (recurse (cdr lists))))) (recurse lists))
26 Polyadiske prosedyrer 10 (define (n-ary-append. lists) (define (recurse lists) (if (null? lists) () (append (car lists) (recurse (cdr lists))))) (recurse lists))? (n-ary-append (1 2) (3 4) (5 6)) ( )
27 Polyadiske prosedyrer 10 (define (n-ary-append. lists) (define (recurse lists) (if (null? lists) () (append (car lists) (recurse (cdr lists))))) (recurse lists))? (n-ary-append (1 2) (3 4) (5 6)) ( ) Men hvorfor trengs det egentlig den indre rekursive prosedyren? (define (n-ary-append. lists) (if (null? lists) () (append (car lists) (n-ary-append (cdr lists)))))
28 Polyadiske prosedyrer 10 (define (n-ary-append. lists) (define (recurse lists) (if (null? lists) () (append (car lists) (recurse (cdr lists))))) (recurse lists))? (n-ary-append (1 2) (3 4) (5 6)) ( ) Men hvorfor trengs det egentlig den indre rekursive prosedyren? (define (n-ary-append. lists) (if (null? lists) () (append (car lists) (n-ary-append (cdr lists))))) Hva er verdien til lists-parameteret i første og andre oppkalling?
29 På en annen sidespor: identitet vs. ekvivalens 11? (define foo foo)? (define bar foo)? (eq? foo bar)
30 På en annen sidespor: identitet vs. ekvivalens 11? (define foo foo)? (define bar foo)? (eq? foo bar) #t? (eq? foo bar)
31 På en annen sidespor: identitet vs. ekvivalens 11? (define foo foo)? (define bar foo)? (eq? foo bar) #t? (eq? foo bar) #f? (define baz (1 2 3))? (eq? baz (1 2 3))
32 På en annen sidespor: identitet vs. ekvivalens 11? (define foo foo)? (define bar foo)? (eq? foo bar) #t? (eq? foo bar) #f? (define baz (1 2 3))? (eq? baz (1 2 3)) #f? (equal? baz (1 2 3))
33 På en annen sidespor: identitet vs. ekvivalens 11? (define foo foo)? (define bar foo)? (eq? foo bar) #t? (eq? foo bar) #f? (define baz (1 2 3))? (eq? baz (1 2 3)) #f? (equal? baz (1 2 3)) #t? (equal? baz (1 (2) 3))
34 På en annen sidespor: identitet vs. ekvivalens 11? (define foo foo)? (define bar foo)? (eq? foo bar) #t? (eq? foo bar) #f? (define baz (1 2 3))? (eq? baz (1 2 3)) #f? (equal? baz (1 2 3)) #t? (equal? baz (1 (2) 3)) #f
35 På en annen sidespor: identitet vs. ekvivalens 11? (define foo foo)? (define bar foo)? (eq? foo bar) #t? (eq? foo bar) #f? (define baz (1 2 3))? (eq? baz (1 2 3)) #f? (equal? baz (1 2 3)) #t? (equal? baz (1 (2) 3)) #f eq? tester identitet, som i Scheme tolkes som samme sted (i minne). equal? tester strukturell ekvivalens mellom (muligens nøstete) par; equal? kan lett implementeres som en polymorf rekursiv prosedyre.
36 På en annen sidespor: identitet vs. ekvivalens 11? (define foo foo)? (define bar foo)? (eq? foo bar) #t? (eq? foo bar) #f? (define baz (1 2 3))? (eq? baz (1 2 3)) #f? (equal? baz (1 2 3)) #t? (equal? baz (1 (2) 3)) #f eq? tester identitet, som i Scheme tolkes som samme sted (i minne). equal? tester strukturell ekvivalens mellom (muligens nøstete) par; equal? kan lett implementeres som en polymorf rekursiv prosedyre.? (define mee baz)? (eq? mee baz)
37 På en annen sidespor: identitet vs. ekvivalens 11? (define foo foo)? (define bar foo)? (eq? foo bar) #t? (eq? foo bar) #f? (define baz (1 2 3))? (eq? baz (1 2 3)) #f? (equal? baz (1 2 3)) #t? (equal? baz (1 (2) 3)) #f eq? tester identitet, som i Scheme tolkes som samme sted (i minne). equal? tester strukturell ekvivalens mellom (muligens nøstete) par; equal? kan lett implementeres som en polymorf rekursiv prosedyre.? (define mee baz)? (eq? mee baz) #t Flere (kalle)navn kan brukes for én og det samme objektet aliasing.
38 Hvordan teste for ekvivalens? 12 (define (equal foo bar) (cond ((and (number? foo) (number? bar)) (= foo bar)) ((and (pair? foo) (pair? bar)) (and (equal (car foo) (car bar)) (equal (cdr foo) (cdr bar)))) (else (eq? foo bar))))
39 Hvordan teste for ekvivalens? 12 (define (equal foo bar) (cond ((and (number? foo) (number? bar)) (= foo bar)) ((and (pair? foo) (pair? bar)) (and (equal (car foo) (car bar)) (equal (cdr foo) (cdr bar)))) (else (eq? foo bar)))) Men hva med identitet vs. ekvivalens mellom to prosedyrer?
40 Hvordan teste for ekvivalens? 12 (define (equal foo bar) (cond ((and (number? foo) (number? bar)) (= foo bar)) ((and (pair? foo) (pair? bar)) (and (equal (car foo) (car bar)) (equal (cdr foo) (cdr bar)))) (else (eq? foo bar)))) Men hva med identitet vs. ekvivalens mellom to prosedyrer?? (define erik (make-account))? (define oe (make-account))? (define liv oe)
41 Hvordan teste for ekvivalens? 12 (define (equal foo bar) (cond ((and (number? foo) (number? bar)) (= foo bar)) ((and (pair? foo) (pair? bar)) (and (equal (car foo) (car bar)) (equal (cdr foo) (cdr bar)))) (else (eq? foo bar)))) Men hva med identitet vs. ekvivalens mellom to prosedyrer?? (define erik (make-account))? (define oe (make-account))? (define liv oe)? (eq? erik oe)
42 Hvordan teste for ekvivalens? 12 (define (equal foo bar) (cond ((and (number? foo) (number? bar)) (= foo bar)) ((and (pair? foo) (pair? bar)) (and (equal (car foo) (car bar)) (equal (cdr foo) (cdr bar)))) (else (eq? foo bar)))) Men hva med identitet vs. ekvivalens mellom to prosedyrer?? (define erik (make-account))? (define oe (make-account))? (define liv oe)? (eq? erik oe) #f? (equal? erik oe)
43 Hvordan teste for ekvivalens? 12 (define (equal foo bar) (cond ((and (number? foo) (number? bar)) (= foo bar)) ((and (pair? foo) (pair? bar)) (and (equal (car foo) (car bar)) (equal (cdr foo) (cdr bar)))) (else (eq? foo bar)))) Men hva med identitet vs. ekvivalens mellom to prosedyrer?? (define erik (make-account))? (define oe (make-account))? (define liv oe)? (eq? erik oe) #f? (equal? erik oe) #f? (eq? liv oe)
44 Hvordan teste for ekvivalens? (define (equal foo bar) (cond ((and (number? foo) (number? bar)) (= foo bar)) ((and (pair? foo) (pair? bar)) (and (equal (car foo) (car bar)) (equal (cdr foo) (cdr bar)))) (else (eq? foo bar)))) Men hva med identitet vs. ekvivalens mellom to prosedyrer?? (define erik (make-account))? (define oe (make-account))? (define liv oe)? (eq? erik oe) #f? (equal? erik oe) #f? (eq? liv oe) #t? ((oe withdraw) 100)? (eq? liv oe) 12
45 Hvordan teste for ekvivalens? (define (equal foo bar) (cond ((and (number? foo) (number? bar)) (= foo bar)) ((and (pair? foo) (pair? bar)) (and (equal (car foo) (car bar)) (equal (cdr foo) (cdr bar)))) (else (eq? foo bar)))) Men hva med identitet vs. ekvivalens mellom to prosedyrer?? (define erik (make-account))? (define oe (make-account))? (define liv oe)? (eq? erik oe) #f? (equal? erik oe) #f? (eq? liv oe) #t? ((oe withdraw) 100)? (eq? liv oe) #t 12
46 En gang i tid: substitusjonsmodellen 13 Prosedyrer evalueres på samme måte som beskrevet og praktisert tidligere. Først evalueres uttrykkene i argumentposisjon, deretter anvendes funksjonen. Vi kan tenke oss at funksjonsuttrykk skrives om på følgende måte: Hele uttrykket erstattes av prosedyrekroppen i definisjonen. Argumentnavnene i definisjonen erstattes av verdiene til uttrykkene i argumentposisjon. Dette kalles substitusjonsmodellen. Eksempel (define square (lambda (x) (* x x))) (square (+ 2 1)) (square 3) (* 3 3) 9
47 Substitusjonsmodellen passer ikke med muterbar data 14 (define (make-withdraw balance) (lambda (amount) (set! balance (- balance amount)) balance))
48 Substitusjonsmodellen passer ikke med muterbar data 14 (define (make-withdraw balance) (lambda (amount) (set! balance (- balance amount)) balance)) Vi må ta hensyn til at første argumentet til set! er spesielt; men ellers kan vi jo bare prøve å bruke den samme oppskriften: ((make-withdraw 25) 20)
49 Substitusjonsmodellen passer ikke med muterbar data 14 (define (make-withdraw balance) (lambda (amount) (set! balance (- balance amount)) balance)) Vi må ta hensyn til at første argumentet til set! er spesielt; men ellers kan vi jo bare prøve å bruke den samme oppskriften: ((make-withdraw 25) 20) ((lambda (amount) (set! balance (- 25 amount)) 25) 20)
50 Substitusjonsmodellen passer ikke med muterbar data 14 (define (make-withdraw balance) (lambda (amount) (set! balance (- balance amount)) balance)) Vi må ta hensyn til at første argumentet til set! er spesielt; men ellers kan vi jo bare prøve å bruke den samme oppskriften: ((make-withdraw 25) 20) ((lambda (amount) (set! balance (- 25 amount)) 25) 20) (set! balance ( )) 25
51 Substitusjonsmodellen passer ikke med muterbar data 14 (define (make-withdraw balance) (lambda (amount) (set! balance (- balance amount)) balance)) Vi må ta hensyn til at første argumentet til set! er spesielt; men ellers kan vi jo bare prøve å bruke den samme oppskriften: ((make-withdraw 25) 20) ((lambda (amount) (set! balance (- 25 amount)) 25) 20) (set! balance ( )) 25 (set! balance 5) 25
52 Substitusjonsmodellen passer ikke med muterbar data 14 (define (make-withdraw balance) (lambda (amount) (set! balance (- balance amount)) balance)) Vi må ta hensyn til at første argumentet til set! er spesielt; men ellers kan vi jo bare prøve å bruke den samme oppskriften: ((make-withdraw 25) 20) ((lambda (amount) (set! balance (- 25 amount)) 25) 20) (set! balance ( )) 25 (set! balance 5) 25 Den lokale variablen balance brukes tre ganger i prosedyrekroppen. Substitueres 2. og 3. bruk av balance samtidig blir resultatet feil.
53 Omgivelsesmodellen kan forklare alt 15 En omgivelse (environment) er en samling av rammer (frames); Hver ramme inneholder bindinger (bindings), dvs. navn, verdi -par; I tilleg har hver ramme en peker til sin omsluttende omgivelse; Prosedyreobjekter er par: prosedyrekoden koblet til en omgivelse.
54 Omgivelsesmodellen kan forklare alt 15 En omgivelse (environment) er en samling av rammer (frames); Hver ramme inneholder bindinger (bindings), dvs. navn, verdi -par; I tilleg har hver ramme en peker til sin omsluttende omgivelse; Prosedyreobjekter er par: prosedyrekoden koblet til en omgivelse.
55 Noen kommentarer til omgivelsesmodellen 16 SICP bruker ramme og omgivelse om hverandre noen steder. Evaluering av uttrykk kan nå defineres i forhold til en omgivelse. define og set! brukes for å etablere eller endre bindinger. Prosedyreoppkalling (og dermed også let) etablerer nye rammer. Rammer nøstes innenfor hverandre og danner så omsluttende rammer. Når et symbol evalueres finnes den nærmeste omsluttende bindingen. Nøstete bindinger for samme navnet overskygger (shadow) hverandre.
56 Repetisjon: omgivelsesmodellen og let 17? (define foo 42)? (let ((x foo) (y 1)) (list x y))
57 Repetisjon: omgivelsesmodellen og let 17? (define foo 42)? (let ((x foo) (y 1)) (list x y)) (42 1)
58 Repetisjon: omgivelsesmodellen og let 17? (define foo 42)? (let ((x foo) (y 1)) (list x y)) (42 1)? (let ((x foo) (y foo)) (list x y))
59 Repetisjon: omgivelsesmodellen og let 17? (define foo 42)? (let ((x foo) (y 1)) (list x y)) (42 1)? (let ((x foo) (y foo)) (list x y)) (42 42)
60 Repetisjon: omgivelsesmodellen og let 17? (define foo 42)? (let ((x foo) (y 1)) (list x y)) (42 1)? (let ((x foo) (y foo)) (list x y)) (42 42)? (let ((x foo) (y x)) (list x y))
61 Repetisjon: omgivelsesmodellen og let? (define foo 42)? (let ((x foo) (y 1)) (list x y)) (42 1)? (let ((x foo) (y foo)) (list x y)) (42 42)? (let ((x foo) (y x)) (list x y)) error: x undefined 17
62 Repetisjon: omgivelsesmodellen og let? (define foo 42)? (let ((x foo) (y 1)) (list x y)) (42 1)? (let ((foo 7) (y foo)) (list foo y))? (let ((x foo) (y foo)) (list x y)) (42 42)? (let ((x foo) (y x)) (list x y)) error: x undefined 17
63 Repetisjon: omgivelsesmodellen og let? (define foo 42)? (let ((x foo) (y 1)) (list x y)) (42 1)? (let ((foo 7) (y foo)) (list foo y)) (7 42)? (let ((x foo) (y foo)) (list x y)) (42 42)? (let ((x foo) (y x)) (list x y)) error: x undefined 17
64 Repetisjon: omgivelsesmodellen og let? (define foo 42)? (let ((x foo) (y 1)) (list x y)) (42 1)? (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)))? (let ((x foo) (y x)) (list x y)) error: x undefined 17
65 Repetisjon: omgivelsesmodellen og let? (define foo 42)? (let ((x foo) (y 1)) (list x y)) (42 1)? (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 ((x foo) (y x)) (list x y)) error: x undefined 17
66 Repetisjon: omgivelsesmodellen og let? (define foo 42)? (let ((x foo) (y 1)) (list x y)) (42 1)? (let ((x foo) (y foo)) (list x y)) (42 42)? (let ((x foo) (y x)) (list x y)) error: x undefined? (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)) 17
67 Repetisjon: omgivelsesmodellen og let? (define foo 42)? (let ((x foo) (y 1)) (list x y)) (42 1)? (let ((x foo) (y foo)) (list x y)) (42 42)? (let ((x foo) (y x)) (list x y)) error: x undefined? (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) 17
68 Tilbake til innkapsling (1/3) 18 Innkapsling kan nå avmystifiseres på grunnlag av omgivelsesmodellen: (define (make-withdraw balance) (lambda (amount) (if (>= balance amount) (begin (set! balance (- balance amount)) balance) "Insufficient Funds"))) (define w1 (make-withdraw 100))
69 Tilbake til innkapsling (1/3) 18 Innkapsling kan nå avmystifiseres på grunnlag av omgivelsesmodellen: (define (make-withdraw balance) (lambda (amount) (if (>= balance amount) (begin (set! balance (- balance amount)) balance) "Insufficient Funds"))) (define w1 (make-withdraw 100)) Kroppen til make-withdraw returnerer et prosedyreobjekt (dvs. par);
70 Tilbake til innkapsling (1/3) 18 Innkapsling kan nå avmystifiseres på grunnlag av omgivelsesmodellen: (define (make-withdraw balance) (lambda (amount) (if (>= balance amount) (begin (set! balance (- balance amount)) balance) "Insufficient Funds"))) (define w1 (make-withdraw 100)) Kroppen til make-withdraw returnerer et prosedyreobjekt (dvs. par); Oppkallingen av make-withdraw etablerer en ny ramme, som så blir omgivelsen til den anonyme prosedyren som lambda returnerer.
71 Tilbake til innkapsling (1/3) 18 Innkapsling kan nå avmystifiseres på grunnlag av omgivelsesmodellen: (define (make-withdraw balance) (lambda (amount) (if (>= balance amount) (begin (set! balance (- balance amount)) balance) "Insufficient Funds"))) (define w1 (make-withdraw 100)) Kroppen til make-withdraw returnerer et prosedyreobjekt (dvs. par); Oppkallingen av make-withdraw etablerer en ny ramme, som så blir omgivelsen til den anonyme prosedyren som lambda returnerer.
72 Tilbake til innkapsling (2/3) 19
73 Tilbake til innkapsling (2/3) 19 Innkapsling: balance er kun tilgjengelig i omgivelsen E1, ikke globalt.
74 Tilbake til innkapsling (3/3) 20 Oppkalling av prosedyreobjektet w1 etablerer nok en ny ramme; som nøstes innenfor omgivelsen til w1 (med innkapsulert balance)
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
DetaljerINF2810: Funksjonell Programmering. Mengder og lokal tilstand
INF2810: Funksjonell Programmering Mengder og lokal tilstand Stephan Oepen & Erik Velldal Universitetet i Oslo Kvinnedagen, 2013 Forrige gang 2 Dagens dont 3 Del 1 Litt mer om hierarkisk data. Representasjon
DetaljerINF2810: Funksjonell Programmering. Tilstand og verditilordning
INF2810: Funksjonell Programmering Tilstand og verditilordning Stephan Oepen Universitetet i Oslo 2. mars 2017 Forrige gang 2 I dag 3 Vi blar om til kapittel 3 i SICP. Tilstand og verditilordning. Destruktive
DetaljerINF2810: Funksjonell Programmering. Tilstand og verditilordning
INF2810: Funksjonell Programmering Tilstand og verditilordning Stephan Oepen Universitetet i Oslo 8. mars 2016 Forrige gang 2 I dag 3 Vi blar om til kapittel 3 i SICP. Tilstand og verditilordning. Destruktive
DetaljerINF2810: Funksjonell Programmering. Tilstand og verditilordning
INF2810: Funksjonell Programmering Tilstand og verditilordning Erik Velldal Universitetet i Oslo 1. mars 2018 Forrige gang 2 Kode som trær 3 Ved evaluering oversettes kildekoden i et språk først til et
DetaljerINF2810: Funksjonell Programmering. Tilstand og verditilordning
INF2810: Funksjonell programmering INF2810: Funksjonell Programmering Tilstand og verditilordning Erik Velldal Universitetet i Oslo 26. februar 2015 Forrige gang 2 I dag Vi blar om til kapittel 3 i SICP.
DetaljerINF2810: 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:
DetaljerINF2810: 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
DetaljerINF2810: 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
DetaljerINF2810: Funksjonell Programmering. Dataabstraksjon og Trerekursjon
INF2810: Funksjonell Programmering Dataabstraksjon og Trerekursjon Stephan Oepen & Erik Velldal Universitetet i Oslo 15. februar, 2013 Tema 2 Forrige uke Høyere-ordens prosedyrer: Prosedyrer som argumenter
DetaljerINF2810: Funksjonell Programmering. Trær og mengder
INF2810: Funksjonell Programmering Trær og mengder Stephan Oepen Universitetet i Oslo 16. februar 2016 Tema 2 Forrige uke Høyereordens prosedyrer lambda, let og lokale variabler Dataabstraksjon I dag Lister
DetaljerINF2810: 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
DetaljerINF2810: Funksjonell Programmering. Mer om verditilordning og muterbare data.
INF2810: Funksjonell Programmering Mer om verditilordning og muterbare data. Erik Velldal Universitetet i Oslo 16. mars 2017 De siste ukene: destruktive operasjoner 2 set! endrer verditilordningen til
DetaljerINF2810: Funksjonell Programmering. Mer om verditilordning og muterbare data.
INF2810: Funksjonell Programmering Mer om verditilordning og muterbare data. Erik Velldal Universitetet i Oslo 16. mars 2017 De siste ukene: destruktive operasjoner 2 set! endrer verditilordningen til
DetaljerINF2810: Funksjonell Programmering. Trær og mengder
INF2810: Funksjonell Programmering Trær og mengder Stephan Oepen Universitetet i Oslo 16. februar 2017 Tema 2 Forrige uke Høyereordens prosedyrer lambda, let og lokale variabler Dataabstraksjon I dag Lister
DetaljerINF2810: 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
DetaljerINF2810: 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
DetaljerINF2810: 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
DetaljerINF2810: 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
DetaljerINF2810: 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
DetaljerINF2810: 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
DetaljerINF2810: 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
DetaljerINF2810: 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
DetaljerHø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
DetaljerRekursjon 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
DetaljerINF2810: 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
DetaljerINF2810: 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
DetaljerINF2810: 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
DetaljerINF2810: Funksjonell Programmering. Muterbare data
INF2810: Funksjonell Programmering Muterbare data Stephan Oepen Universitetet i Oslo 9. mars 2017 Agenda Forrige uke Prosedyrebasert objektorientering Lokale tilstandsvariabler Innkapsling + set! Eksempel:
DetaljerINF2810: 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
DetaljerINF2810: 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!
DetaljerINF2810: 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
DetaljerUNIVERSITETET I OSLO
UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i: INF2810 Eksamensdag: Fredag 5. juni 2015 Tid for eksamen: 14:30 (4 timer) Oppgavesettet er på 4 sider (ikke medregnet denne siden)
DetaljerINF2810: 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
DetaljerINF2810: 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
DetaljerINF2810: 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
DetaljerINF2810: 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
DetaljerINF2810: 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
DetaljerINF2810: 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
DetaljerINF2810: 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.
DetaljerINF2810: Funksjonell Programmering. Utsatt evaluering og strømmer
INF2810: Funksjonell programmering INF2810: Funksjonell Programmering Utsatt evaluering og strømmer Erik Velldal Universitetet i Oslo 12. april 2016 Tema Forrige gang Ny datastruktur, ny teknikk: Strømmer
DetaljerINF2810: 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
DetaljerINF2810: 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
DetaljerINF2810: 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
DetaljerINF2810: 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
DetaljerINF2810: 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
DetaljerINF2810: 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
DetaljerINF2810: 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:
DetaljerINF2810: 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:
DetaljerINF2810: Funksjonell Programmering. Utsatt evaluering og strømmer
INF2810: Funksjonell Programmering Utsatt evaluering og strømmer Stephan oepen Universitetet i Oslo 6. april 2017 Tema 2 Forrige gang Ny datastruktur, ny teknikk: Strømmer Utsatt evaluering I dag Uendelige
DetaljerINF2810: Funksjonell Programmering. Utsatt evaluering og strømmer
INF2810: Funksjonell Programmering Utsatt evaluering og strømmer Erik Velldal Universitetet i Oslo 12. april 2016 Tema 2 Forrige gang Ny datastruktur, ny teknikk: Strømmer Utsatt evaluering Uendelige sekvenser
DetaljerINF2810: Funksjonell Programmering. Huffmankoding
INF2810: Funksjonell programmering INF2810: Funksjonell Programmering Huffmankoding Erik Velldal Universitetet i Oslo 20. februar 2015 Tema I går Trær som lister av lister Trerekursjon Mengder som trær
DetaljerINF2810: 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
DetaljerINF2810: Funksjonell Programmering. Muterbare data
INF2810: Funksjonell Programmering Muterbare data Stephan Oepen Universitetet i Oslo 9. mars 2017 Agenda Forrige uke Prosedyrebasert objektorientering Lokale tilstandsvariabler Innkapsling + set! Eksempel:
DetaljerINF2810: 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
DetaljerINF2810: 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
DetaljerINF2810: 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
DetaljerINF2810: 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
DetaljerINF2810: 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
DetaljerUNIVERSITETET 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:
DetaljerINF2810: Funksjonell Programmering. Strømmer og utsatt evaluering
INF2810: Funksjonell programmering INF2810: Funksjonell Programmering Strømmer og utsatt evaluering Erik Velldal Universitetet i Oslo 5. april 2016 Forrige forelesning Mer om (prosedyre)navn, bindinger,
DetaljerINF2810: 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
DetaljerINF2810: Funksjonell Programmering. Utsatt evaluering og strømmer
INF2810: Funksjonell Programmering Utsatt evaluering og strømmer Stephan oepen Universitetet i Oslo 6. april 2017 Tema 2 Forrige gang Ny datastruktur, ny teknikk: Strømmer Utsatt evaluering I dag Uendelige
DetaljerINF2810: 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
DetaljerInnlevering 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.
DetaljerIN2040: Funksjonell programmering. Trær, mengder og huffmankoding
IN2040: Funksjonell programmering Trær, mengder og huffmankoding Erik Velldal Universitetet i Oslo 18. september 2019 Tema 2 Forrige uke lambda, let og lokale variabler Dataabstraksjon Lister av lister:
DetaljerInnlevering 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
DetaljerEksamen i HUMIT 2710, Funksjonell programmering, våren Ingen hjelpemidler er tillatt. <resten av forsiden> Side 1 av 7
Eksamen i HUMIT 2710, Funksjonell programmering, våren 2005 Ingen hjelpemidler er tillatt. Side 1 av 7 Oppgave 1 Rekursjon Fakultetsfunksjonen, her kalt Fak, kan defineres rekursivt
DetaljerINF2810: 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?
DetaljerINF2810: 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
DetaljerINF2810: 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
DetaljerEksamen i SLI230, vår 2003.
Eksamen i SLI230, vår 2003. Oppgavesettet har 8 sider medregnet denne forsiden. Ingen hjelpemidler er tillatt. Vedlegg: To sider som inneholder en liste over primitiver fra scheme (og simply.scm) samt
DetaljerAppendiks A Kontinuasjoner
Appendiks A Kontinuasjoner Fra R5RS: "Whenever a Scheme expression is evaluated there is a continuation wanting the result of the expression." Eller med andre ord: En kontinuasjon i et program under utførelse
DetaljerUNIVERSITETET I OSLO
Side 1 UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i: INF2810 Eksamensdag: 7. juni Tid for eksamen: 14.30 Oppgavesettet er på 5 sider Vedlegg Relevante prosedyrer Tillatte
DetaljerINF2810: 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?
DetaljerINF2810: 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
DetaljerINF2810: 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
DetaljerINF2810: 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
DetaljerINF2810: Funksjonell Programmering. Introduksjon
INF2810: Funksjonell Programmering Introduksjon Stephan Oepen Universitetet i Oslo 19. januar 2019 Nummer 2 2 Erik Velldal Nummer 2 2 Erik Velldal Hver tar halvparten av forelesningene; hyppig bytte frem
DetaljerVi 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
DetaljerUNIVERSITETET 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.
DetaljerRepetisjon: 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
DetaljerDagens 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:
DetaljerLISP PVV-kurs 25. oktober 2012
LISP PVV-kurs 25. oktober 2012 Hva er Lisp? Grunnleggende konsepter Variabler (Pause) Lister Løkker Funksjoner Oversikt over kurset Først: Få tak i en implementasjon av Common Lisp Mange implementasjoner
DetaljerInformasjonsteori og entropi
Informasjonsteori og entropi Termen entropi tilhører i utgangspunktet termodynamikken, der den, svært forenklet, betegner reduksjon av energipotensialet innenfor et system der det foregår enerigutveksling
DetaljerINF2220: Forelesning 2. Balanserte søketrær Rød-svarte trær (kapittel12.2) B-trær (kapittel 4.7)
INF2220: Forelesning 2 Balanserte søketrær Rød-svarte trær (kapittel12.2) B-trær (kapittel 4.7) REPETISJON: BINÆRE SØKETRÆR 2 Binære søketrær 8 4 12 2 7 9 15 6 11 13 16 For enhver node i et binært søketre
DetaljerINF2220: Forelesning 2
INF2220: Forelesning 2 Balanserte søketrær Rød-svarte trær (kapittel12.2) B-trær (kapittel 4.7) REPETISJON: BINÆRE SØKETRÆR 2 Binære søketrær 8 4 12 2 7 9 15 6 11 13 16 For enhver node i et binært søketre
DetaljerINF2810: 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
DetaljerGjennomgåelse av eksamensoppgaven i HUMIT2710 fra våren 2004
Gjennomgåelse av eksamensoppgaven i HUMIT2710 fra våren 2004 Oppgave 1 For å komme nærmere kvadratroten til et tall fra en foreløpig tilnærming y, kan vi bruke formelen (y + /y)/2. Dette gir grunnlag for
Detaljer(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)
DetaljerModerne Funksjonell Programmering i Lisp
Moderne Funksjonell Programmering i Lisp Lars Tveito 11. mai, 2017 Institutt for Informatikk, University of Oslo Introduksjon Abstract Vi skal utforske programmeringsspråket Clojure, en moderne Lisp-dialekt.
DetaljerINF2810: Funksjonell Programmering. Introduksjon
INF2810: Funksjonell Programmering Introduksjon Erik Velldal Universitetet i Oslo 18. januar 2018 Tema for i dag 2 Introduksjon Lærebok Hva skal vi lære? Praktisk informasjon Grupper Obliger Canvas Scheme
DetaljerPar 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
DetaljerSide 1. Oppgave 1. Prosedyrer 1.1. Prosedyrene f og g skal begge returnere prosedyrer. a. Skriv f slik at ((f a) b) returnerer summen av a og b.
Side 1 Oppgave 1. Prosedyrer 1.1. Prosedyrene f og g skal begge returnere prosedyrer. a. Skriv f slik at ((f a) b) returnerer summen av a og b. (define (f a) (lambda (b) (add a b ))) b. Skriv g, uten å
DetaljerInformasjonsteori og entropi
Informasjonsteori og entropi Termen entropi tilhører i utgangspunktet termodynamikken, der den, svært forenklet, betegner reduksjon av energipotensialet innenfor et system der det foregår enerigutveksling
DetaljerINF2220: Forelesning 1. Praktisk informasjon Analyse av algoritmer (kapittel 2) (Binær)trær (kapittel )
INF2220: Forelesning 1 Praktisk informasjon Analyse av algoritmer (kapittel 2) (Binær)trær (kapittel 4.1-4.3 + 4.6) PRAKTISK INFORMASJON 2 Praktisk informasjon Kursansvarlige Ragnhild Kobro Runde (ragnhilk@ifi.uio.no)
DetaljerMemoisering, 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
DetaljerMemoisering, 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
DetaljerUNIVERSITETET I OSLO
Side 1 UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i: INF2810 Eksamensdag: 6. juni Tid for eksamen: 14.30 Oppgavesettet er på 4 sider pluss vedlegg Tillatte hjelpemiddel: Ingen
DetaljerDet er ikke tillatt med andre hjelpemidler enn de to sidene som er vedlagt oppgavesettet. Følgende funksjoner er definert og brukes i oppgaven:
Eksamen SLI 230 Bakerst ligger to sider med oversikt over standardprosedyrer og spesialformer i Scheme, samt oversikt over prosedyrer fra Simply Scheme og en enkel oversikt over konvertering mellom datatyper
Detaljer