INF2810: Funksjonell programmering: Introduksjon

Størrelse: px
Begynne med side:

Download "INF2810: Funksjonell programmering: Introduksjon"

Transkript

1 INF2810: Funksjonell programmering: Introduksjon Stephan Oepen & Erik Velldal Universitetet i Oslo 18. januar, 2013

2 Tema for i dag 2 Introduksjon Praktiske detaljer Pensum Obliger Lærebok Hva skal vi lære? Litt om Scheme

3 Om oss 3 Stephan Oepen, professor og gruppeleder ved språkteknologigruppa (LTG), oe [at] ifi.uio.no. Erik Velldal, forsker ved LTG, erikve [at] ifi.uio.no.

4 Om oss 3 Stephan Oepen, professor og gruppeleder ved språkteknologigruppa (LTG), oe [at] ifi.uio.no. Erik Velldal, forsker ved LTG, erikve [at] ifi.uio.no. Gruppelærere: - Simen Heggestøyl, simenheg [at] ifi.uio.no - Torkil Vederhus, torkilve [at] ifi.uio.no - Martin Bielcki, martinhb [at] ifi.uio.no

5 Om oss 3 Stephan Oepen, professor og gruppeleder ved språkteknologigruppa (LTG), oe [at] ifi.uio.no. Erik Velldal, forsker ved LTG, erikve [at] ifi.uio.no. Gruppelærere: - Simen Heggestøyl, simenheg [at] ifi.uio.no - Torkil Vederhus, torkilve [at] ifi.uio.no - Martin Bielcki, martinhb [at] ifi.uio.no Felles henvendelser til fag- og-gruppelærere: inf2810-hjelp [at] ifi.uio.no

6 Om oss Stephan Oepen, professor og gruppeleder ved språkteknologigruppa (LTG), oe [at] ifi.uio.no. Erik Velldal, forsker ved LTG, erikve [at] ifi.uio.no. Gruppelærere: - Simen Heggestøyl, simenheg [at] ifi.uio.no - Torkil Vederhus, torkilve [at] ifi.uio.no - Martin Bielcki, martinhb [at] ifi.uio.no Felles henvendelser til fag- og-gruppelærere: inf2810-hjelp [at] ifi.uio.no For beskjeder: - Husk å sjekke UiO-eposten din og/eller - Abonnér på RSS-feed en til beskjedene på kurssiden; 3

7 Obliger 4 3 obliger, hver i to deler (a + b). Dvs. 6 innleveringer tilsammen. Man kan oppnå opptil 10 poeng per innlevering Kreves minst 12 poeng (av 20 mulige) per oblig (a + b) for å gå videre. (Innleveringsfrister utsettes bare ved egenmelding eller legeerklæring, ingen omlevering.) Alle 3 obligene må vurderes som bestått for å kunne ta eksamen. Oblig 1 må løses individuelt, mens 2 og 3 skal løses i grupper av to eller tre studenter sammen.

8 Læreboka I Structure and Interpretation of Computer Programs, 2nd ed. by Abelson, Sussman & Sussman. I Aka SICP eller the Wizard book I Gratis tilgjengelig på nett I HTML-versjon: mitpress.mit.edu/sicp/ I Pdf-versjon (ulike versjoner tilpasset lesebrett, tablets, etc): sicpebook.wordpress.com/ebook/ 5

9 Læreboka (forts.) I SICP er en klassiker innen informatikk. I 1. utgave 1984, 2 utg I Brukes fortsatt på en rekke universiteter. I Gammel men ikke støvete. I Hvordan kan den fortsatt være relevant? I Som med klassikere flest er den tidløs. I Ikke fokus på lavnivå-detaljer ved språk og syntaks. I Generelle teknikker for å kontrollere kompleksiteten i programmer via f.eks abstraksjon, modularitet, og funksjonell programmering. 6

10 Noe av det vi skal se på i kurset 7 Rekursjon prosedyrer som kaller på seg selv

11 Noe av det vi skal se på i kurset 7 Rekursjon prosedyrer som kaller på seg selv Prosedyrer som førsteklasses objekter prosedyrer er en datatype på linje med tall, symboler, strenger, lister, etc. Høyere-ordens prosedyrer prosedyrer som tar andre prosedyrer som input-argument og/eller prosedyrer som returnerer andre prosedyrer som output-verdi

12 Noe av det vi skal se på i kurset 7 Rekursjon prosedyrer som kaller på seg selv Prosedyrer som førsteklasses objekter prosedyrer er en datatype på linje med tall, symboler, strenger, lister, etc. Høyere-ordens prosedyrer prosedyrer som tar andre prosedyrer som input-argument og/eller prosedyrer som returnerer andre prosedyrer som output-verdi Objektorientering via prosedyrer innkapsulering av data i funksj.definisjoner for å skjule tilstandsvariabler

13 Noe av det vi skal se på i kurset 7 Rekursjon prosedyrer som kaller på seg selv Prosedyrer som førsteklasses objekter prosedyrer er en datatype på linje med tall, symboler, strenger, lister, etc. Høyere-ordens prosedyrer prosedyrer som tar andre prosedyrer som input-argument og/eller prosedyrer som returnerer andre prosedyrer som output-verdi Objektorientering via prosedyrer innkapsulering av data i funksj.definisjoner for å skjule tilstandsvariabler Memoisering prosedyrer som husker tidligere beregninger, indeksert på argumentene

14 Noe av det vi skal se på i kurset 7 Rekursjon prosedyrer som kaller på seg selv Prosedyrer som førsteklasses objekter prosedyrer er en datatype på linje med tall, symboler, strenger, lister, etc. Høyere-ordens prosedyrer prosedyrer som tar andre prosedyrer som input-argument og/eller prosedyrer som returnerer andre prosedyrer som output-verdi Objektorientering via prosedyrer innkapsulering av data i funksj.definisjoner for å skjule tilstandsvariabler Memoisering prosedyrer som husker tidligere beregninger, indeksert på argumentene Strømmer og utsatt evaluering definering av uendelige sekvenser og realisering de enkelte elementene i disse ved utsatt evaluering etter behov

15 Noe av det vi skal se på i kurset Rekursjon prosedyrer som kaller på seg selv Prosedyrer som førsteklasses objekter prosedyrer er en datatype på linje med tall, symboler, strenger, lister, etc. Høyere-ordens prosedyrer prosedyrer som tar andre prosedyrer som input-argument og/eller prosedyrer som returnerer andre prosedyrer som output-verdi Objektorientering via prosedyrer innkapsulering av data i funksj.definisjoner for å skjule tilstandsvariabler Memoisering prosedyrer som husker tidligere beregninger, indeksert på argumentene Strømmer og utsatt evaluering definering av uendelige sekvenser og realisering de enkelte elementene i disse ved utsatt evaluering etter behov Programmer som opererer på programmer program = data enkelt å gjøre i Lisp siden programkoden er basert på en språkets innebygde datastrukturer; lister 7

16 Lisp 8 Kraftig høynivå-språk med lange tradisjoner. Har hatt en tett kobling til forskningen på kunstig intelligens. Som SICP er også Lisp i seg selv en klassiker. Oppdaget av John McCarthy allerede i Først bare ment som en matematisk formalisme (for rekursjonsteori og symbolsk algebra). En av studentene hans, Steve Russell, implementerte så en interpreter for formalismen og dermed var programmeringsspråket Lisp født. Snarere enn at Lisp har blir utdatert har tendensen vært at andre språk stadig beveger seg nærmere Lisp.

17 Koding i INF Programmeringspråk: Scheme Programmeringsomgivelse: DrRacket Minimalistisk dialekt av Lisp. Andre dialekter: Common Lisp, Clojure, Emacs Lisp, Racket (en dialekt av Scheme; tidligere kalt PLT Scheme), etc. Ekstremt enkel syntaks, lett semantikk. Vi skal lære Scheme på noen minutter; og så bruke resten av kurset på å mestre noen av de avanserte teknikkene det støtter.

18 DrRacket 10 Hjemmeside: racket-lang.org Innstalert på alle IFI-maskiner. Viktig: DrRacket støtter flere standarder; sett språk til R 5 RS. Se kurssidene for en innføring i bruk. I det nederste tekstområdet kan du teste og utvikle kode interaktivt: Skriv et uttrykk trykk enter; uttrykket evalueres; resultatet printes. I Scheme/Lisp-lingo: read-eval-print loop eller REPL.

19 Programmeringsparadigmer 11 Funksjonell programmering Uten tilstandsendringer Imperativ programmering Med tilstandsendringer

20 Programmeringsparadigmer 11 Funksjonell programmering Uten tilstandsendringer En prosedyres returverdi er alltid den samme hvis argumentene er de samme. Imperativ programmering Med tilstandsendringer Prosedyrers returverdi kan variere fra kall til kall, selv om argumentene er de samme.

21 Programmeringsparadigmer 11 Funksjonell programmering Uten tilstandsendringer En prosedyres returverdi er alltid den samme hvis argumentene er de samme. Beregninger utføres som funksjonelle transformasjoner av data. Unngår muterbare data og tilstander (state). Vi deler problemet opp i et sett av funksjoner. For hver funksjon må vi definere hva som skal være dens argumenter (input) og retur-verdier (output). Imperativ programmering Med tilstandsendringer Prosedyrers returverdi kan variere fra kall til kall, selv om argumentene er de samme. Beregninger utføres som sekvensielle endringer av tilstands-variabler. Vi spesifiserer en sekvens av operasjoner som skal utføres, trinn for trinn, for å løse et gitt problem.

22 Viktige egenskaper ved funksjonell programmering 12 Prosedyrer påvirker ikke ekstern tilstand. En funksjon kalles for dens returverdi; uten bieffekter (side-effects).

23 Viktige egenskaper ved funksjonell programmering 12 Prosedyrer påvirker ikke ekstern tilstand. En funksjon kalles for dens returverdi; uten bieffekter (side-effects). Prosedyrer er uavhengige av ekstern tilstand. Kallet på en prosedyre gir alltid samme resultat med samme argument.

24 Viktige egenskaper ved funksjonell programmering 12 Prosedyrer påvirker ikke ekstern tilstand. En funksjon kalles for dens returverdi; uten bieffekter (side-effects). Prosedyrer er uavhengige av ekstern tilstand. Kallet på en prosedyre gir alltid samme resultat med samme argument. Gjennomsiktig semantikk (referential transparency) Semantikken til et uttrykk er uavhengig av hvor og når det brukes. Funksjonskall kan erstattes med returverdi uten at programmets semantikk endres.

25 Viktige egenskaper ved funksjonell programmering 12 Prosedyrer påvirker ikke ekstern tilstand. En funksjon kalles for dens returverdi; uten bieffekter (side-effects). Prosedyrer er uavhengige av ekstern tilstand. Kallet på en prosedyre gir alltid samme resultat med samme argument. Gjennomsiktig semantikk (referential transparency) Semantikken til et uttrykk er uavhengig av hvor og når det brukes. Funksjonskall kan erstattes med returverdi uten at programmets semantikk endres. Enklere å lese og vedlikeholde å teste og debugge; enkeltfunksjoner kan testes i isolasjon. å parallelisere.

26 Viktige egenskaper ved funksjonell programmering 12 Prosedyrer påvirker ikke ekstern tilstand. En funksjon kalles for dens returverdi; uten bieffekter (side-effects). Prosedyrer er uavhengige av ekstern tilstand. Kallet på en prosedyre gir alltid samme resultat med samme argument. Gjennomsiktig semantikk (referential transparency) Semantikken til et uttrykk er uavhengig av hvor og når det brukes. Funksjonskall kan erstattes med returverdi uten at programmets semantikk endres. Enklere å lese og vedlikeholde å teste og debugge; enkeltfunksjoner kan testes i isolasjon. å parallelisere. Ofte ansett for å gi økt sikkerhet (pga alt over).

27 Viktige egenskaper ved funksjonell programmering 12 Prosedyrer påvirker ikke ekstern tilstand. En funksjon kalles for dens returverdi; uten bieffekter (side-effects). Prosedyrer er uavhengige av ekstern tilstand. Kallet på en prosedyre gir alltid samme resultat med samme argument. Gjennomsiktig semantikk (referential transparency) Semantikken til et uttrykk er uavhengig av hvor og når det brukes. Funksjonskall kan erstattes med returverdi uten at programmets semantikk endres. Enklere å lese og vedlikeholde å teste og debugge; enkeltfunksjoner kan testes i isolasjon. å parallelisere. Ofte ansett for å gi økt sikkerhet (pga alt over). Funksjoner danner byggeklosser. Kan være sammensatte / kan settes sammen. Legger til rette for nedenfra-og-opp design og modularitet.

28 Viktige egenskaper ved funksjonell programmering Prosedyrer påvirker ikke ekstern tilstand. En funksjon kalles for dens returverdi; uten bieffekter (side-effects). Prosedyrer er uavhengige av ekstern tilstand. Kallet på en prosedyre gir alltid samme resultat med samme argument. Gjennomsiktig semantikk (referential transparency) Semantikken til et uttrykk er uavhengig av hvor og når det brukes. Funksjonskall kan erstattes med returverdi uten at programmets semantikk endres. Enklere å lese og vedlikeholde å teste og debugge; enkeltfunksjoner kan testes i isolasjon. å parallelisere. Ofte ansett for å gi økt sikkerhet (pga alt over). Funksjoner danner byggeklosser. Kan være sammensatte / kan settes sammen. Legger til rette for nedenfra-og-opp design og modularitet. Prosedyrer er data. 12

29 Ikke på fokus på ren funksjonell programmering 13 Hverken INF2810 eller SICP prediker rendyrket funksjonell programmering. Scheme er ikke et rent funksjonelt språk; inneholder også støtte for destruktive operasjoner og muterbare data.

30 Ikke på fokus på ren funksjonell programmering 13 Hverken INF2810 eller SICP prediker rendyrket funksjonell programmering. Scheme er ikke et rent funksjonelt språk; inneholder også støtte for destruktive operasjoner og muterbare data. Poenget er ikke at det ene eller andre paradigmet alltid er bedre enn det andre... men at du blir en bedre programmerer ved å kjenne til flere ulike teknikker og tenkemåter.

31 Nå skal vi bruke et par minutter på å lære Scheme 14 Vi tester noen uttrykk mot REPL en. (= den interaktive Scheme-omgivelsen) Vi bruker? for representere REPL-promptet og for hva et uttrykk evalueres til. Datatyper som tall, strenger og boolske konstanter er eksempler på primitive / atomære uttrykk. Slike uttrykk evaluerer til seg selv. Eksempler? "dette er en streng" "dette er en streng"

32 Nå skal vi bruke et par minutter på å lære Scheme 14 Vi tester noen uttrykk mot REPL en. (= den interaktive Scheme-omgivelsen) Vi bruker? for representere REPL-promptet og for hva et uttrykk evalueres til. Datatyper som tall, strenger og boolske konstanter er eksempler på primitive / atomære uttrykk. Slike uttrykk evaluerer til seg selv. Eksempler? "dette er en streng" "dette er en streng"? 42 42

33 Nå skal vi bruke et par minutter på å lære Scheme 14 Vi tester noen uttrykk mot REPL en. (= den interaktive Scheme-omgivelsen) Vi bruker? for representere REPL-promptet og for hva et uttrykk evalueres til. Datatyper som tall, strenger og boolske konstanter er eksempler på primitive / atomære uttrykk. Slike uttrykk evaluerer til seg selv. Eksempler? "dette er en streng" "dette er en streng"? 42 42?

34 Nå skal vi bruke et par minutter på å lære Scheme 14 Vi tester noen uttrykk mot REPL en. (= den interaktive Scheme-omgivelsen) Vi bruker? for representere REPL-promptet og for hva et uttrykk evalueres til. Datatyper som tall, strenger og boolske konstanter er eksempler på primitive / atomære uttrykk. Slike uttrykk evaluerer til seg selv. Eksempler? "dette er en streng" "dette er en streng"? 42 42? ? 1/3 1/3

35 Nå skal vi bruke et par minutter på å lære Scheme 14 Vi tester noen uttrykk mot REPL en. (= den interaktive Scheme-omgivelsen) Vi bruker? for representere REPL-promptet og for hva et uttrykk evalueres til. Datatyper som tall, strenger og boolske konstanter er eksempler på primitive / atomære uttrykk. Slike uttrykk evaluerer til seg selv. Eksempler? "dette er en streng" "dette er en streng"? 42 42? ? 1/3 1/3? #t #t

36 Nå skal vi bruke et par minutter på å lære Scheme Vi tester noen uttrykk mot REPL en. (= den interaktive Scheme-omgivelsen) Vi bruker? for representere REPL-promptet og for hva et uttrykk evalueres til. Datatyper som tall, strenger og boolske konstanter er eksempler på primitive / atomære uttrykk. Slike uttrykk evaluerer til seg selv. Eksempler? "dette er en streng" "dette er en streng"? 42 42? ? 1/3 1/3? #t #t? #f #f 14

37 Funksjoner og navngitte variabler 15 Parentesbasert prefiksnotasjon. Scheme-kode består av lister. En liste omsluttes av parenteser. Første element (prefikset) er operatoren (prosedyre / funksjon). Resten av lista består av operandene vi vil anvende operatoren på (argumentene / parameterene). Eksempler? (+ 1 2) 3

38 Funksjoner og navngitte variabler 15 Parentesbasert prefiksnotasjon. Scheme-kode består av lister. En liste omsluttes av parenteser. Første element (prefikset) er operatoren (prosedyre / funksjon). Resten av lista består av operandene vi vil anvende operatoren på (argumentene / parameterene). Lett å anvende en prosedyre på vilkårlig mange argumenter med prefiksnotasjon. Eksempler? (+ 1 2) 3? ( ) 25

39 Funksjoner og navngitte variabler 15 Parentesbasert prefiksnotasjon. Scheme-kode består av lister. En liste omsluttes av parenteser. Første element (prefikset) er operatoren (prosedyre / funksjon). Resten av lista består av operandene vi vil anvende operatoren på (argumentene / parameterene). Lett å anvende en prosedyre på vilkårlig mange argumenter med prefiksnotasjon. define: er en såkalt special form, ikke en vanlig prosedyre. Brukes for å introdusere en leksikalsk variabel; symbol som bindes til en verdi. Eksempler? (+ 1 2) 3? ( ) 25? (define foo 42)

40 Funksjoner og navngitte variabler 15 Parentesbasert prefiksnotasjon. Scheme-kode består av lister. En liste omsluttes av parenteser. Første element (prefikset) er operatoren (prosedyre / funksjon). Resten av lista består av operandene vi vil anvende operatoren på (argumentene / parameterene). Lett å anvende en prosedyre på vilkårlig mange argumenter med prefiksnotasjon. define: er en såkalt special form, ikke en vanlig prosedyre. Brukes for å introdusere en leksikalsk variabel; symbol som bindes til en verdi. Eksempler? (+ 1 2) 3? ( ) 25? (define foo 42)? foo 42? (+ foo 58) 100? (+ foo bar) error; bar undefined

41 Sammensatte uttrykk 16? (* 10 (+ foo 58)) 1000? (/ ( ) 2) 15 Lister kan omslutte hverande for å bygge opp sammensatte uttrykk. Parentesene gir strukturen; ingen tvetydighet mht. presedens.

42 Sammensatte uttrykk 16? (* 10 (+ foo 58)) 1000? (/ ( ) 2) 15? (* (+ foo 58) (- (/ 8 2) 2)) 200 Lister kan omslutte hverande for å bygge opp sammensatte uttrykk. Parentesene gir strukturen; ingen tvetydighet mht. presedens.

43 Sammensatte uttrykk 16? (* 10 (+ foo 58)) 1000? (/ ( ) 2) 15? (* (+ foo 58) (- (/ 8 2) 2)) 200? (* (+ foo 58) (- (/ 8 2) 2)) 200 Lister kan omslutte hverande for å bygge opp sammensatte uttrykk. Parentesene gir strukturen; ingen tvetydighet mht. presedens. Ved lange uttrykk bruker vi indentering for å gjøre koden mer lesbar. (Bruk TAB i DrRacket / Emacs.)

44 Når Scheme leser sammensatte utrykk 17 Schemes evalueringsregel: 1) Evaluér enkelt-uttrykkene i sammensetningen a) Atomære uttrykk: evalueres til seg selv. b) Leksikalske variabler og funksjonsnavn: evalueres til verdiene de refererer til. c) Sammensatte utrykk: anvend 1) igjen. 2) Anvend operatoren (det første uttrykket i lista) på verdiene til de andre uttrykkene. Eksempel? (* (+ foo 58) (- (/ 8 2) 2))

45 Når Scheme leser sammensatte utrykk 17 Schemes evalueringsregel: 1) Evaluér enkelt-uttrykkene i sammensetningen a) Atomære uttrykk: evalueres til seg selv. b) Leksikalske variabler og funksjonsnavn: evalueres til verdiene de refererer til. c) Sammensatte utrykk: anvend 1) igjen. 2) Anvend operatoren (det første uttrykket i lista) på verdiene til de andre uttrykkene. Eksempel? (* (+ foo 58) (- (/ 8 2) 2)) (* ( ) (- (/ 8 2) 2))

46 Når Scheme leser sammensatte utrykk 17 Schemes evalueringsregel: 1) Evaluér enkelt-uttrykkene i sammensetningen a) Atomære uttrykk: evalueres til seg selv. b) Leksikalske variabler og funksjonsnavn: evalueres til verdiene de refererer til. c) Sammensatte utrykk: anvend 1) igjen. 2) Anvend operatoren (det første uttrykket i lista) på verdiene til de andre uttrykkene. Eksempel? (* (+ foo 58) (- (/ 8 2) 2)) (* ( ) (- (/ 8 2) 2)) (* 100 (- (/ 8 2) 2))

47 Når Scheme leser sammensatte utrykk 17 Schemes evalueringsregel: 1) Evaluér enkelt-uttrykkene i sammensetningen a) Atomære uttrykk: evalueres til seg selv. b) Leksikalske variabler og funksjonsnavn: evalueres til verdiene de refererer til. c) Sammensatte utrykk: anvend 1) igjen. 2) Anvend operatoren (det første uttrykket i lista) på verdiene til de andre uttrykkene. Eksempel? (* (+ foo 58) (- (/ 8 2) 2)) (* ( ) (- (/ 8 2) 2)) (* 100 (- (/ 8 2) 2)) (* 100 (- 4 2))

48 Når Scheme leser sammensatte utrykk 17 Schemes evalueringsregel: 1) Evaluér enkelt-uttrykkene i sammensetningen a) Atomære uttrykk: evalueres til seg selv. b) Leksikalske variabler og funksjonsnavn: evalueres til verdiene de refererer til. c) Sammensatte utrykk: anvend 1) igjen. 2) Anvend operatoren (det første uttrykket i lista) på verdiene til de andre uttrykkene. Eksempel? (* (+ foo 58) (- (/ 8 2) 2)) (* ( ) (- (/ 8 2) 2)) (* 100 (- (/ 8 2) 2)) (* 100 (- 4 2)) (* 100 2)

49 Når Scheme leser sammensatte utrykk Schemes evalueringsregel: 1) Evaluér enkelt-uttrykkene i sammensetningen a) Atomære uttrykk: evalueres til seg selv. b) Leksikalske variabler og funksjonsnavn: evalueres til verdiene de refererer til. c) Sammensatte utrykk: anvend 1) igjen. 2) Anvend operatoren (det første uttrykket i lista) på verdiene til de andre uttrykkene. Eksempel? (* (+ foo 58) (- (/ 8 2) 2)) (* ( ) (- (/ 8 2) 2)) (* 100 (- (/ 8 2) 2)) (* 100 (- 4 2)) (* 100 2)

50 Når Scheme leser sammensatte utrykk Schemes evalueringsregel: 1) Evaluér enkelt-uttrykkene i sammensetningen a) Atomære uttrykk: evalueres til seg selv. b) Leksikalske variabler og funksjonsnavn: evalueres til verdiene de refererer til. c) Sammensatte utrykk: anvend 1) igjen. 2) Anvend operatoren (det første uttrykket i lista) på verdiene til de andre uttrykkene. Vi har beskrevet evalueringen rekursivt; regelen kaller på seg selv (1c). Scheme og Lisp har en ekstremt enkel syntax; alt oppsummeres med regelen over. Unntaket er special forms (som define), som har sine egne evalueringsregler. Eksempel? (* (+ foo 58) (- (/ 8 2) 2)) (* ( ) (- (/ 8 2) 2)) (* 100 (- (/ 8 2) 2)) (* 100 (- 4 2)) (* 100 2)

51 Oppsummering om datatypene vi har sett til nå 18 Tall, booleans, og strenger er selv-evaluerende.? ? "foo" "foo"? #t #t

52 Oppsummering om datatypene vi har sett til nå 18 Tall, booleans, og strenger er selv-evaluerende.? ? "foo" "foo"? #t #t Symboler evalueres til verdien de navngir (om noen):? foo 42? + #<procedure:+>? bar error (med mindre vi har opprettet en binding tidligere)

53 Oppsummering om datatypene vi har sett til nå 18 Tall, booleans, og strenger er selv-evaluerende.? ? "foo" "foo"? #t #t Symboler evalueres til verdien de navngir (om noen):? foo 42? + #<procedure:+>? bar error (med mindre vi har opprettet en binding tidligere) Lister er prosedyrekall. Det første elementet er en operator som kalles med verdiene til de resterende elementene som argumenter.? (* 10 (+ 2 3)) 50? (bar 1 2) error (med mindre funksonen bar finnes)

54 Oppsummering om datatypene vi har sett til nå 18 Tall, booleans, og strenger er selv-evaluerende.? ? "foo" "foo"? #t #t Symboler evalueres til verdien de navngir (om noen):? foo 42? + #<procedure:+>? bar error (med mindre vi har opprettet en binding tidligere) Lister er prosedyrekall. Det første elementet er en operator som kalles med verdiene til de resterende elementene som argumenter.? (* 10 (+ 2 3)) 50? (bar 1 2) error (med mindre funksonen bar finnes) Men lister kan også være data:? (list 1 2 3) (1 2 3)? (list foo 2 "bar") (42 2 "bar")

55 Oppsummering om datatypene vi har sett til nå 18 Tall, booleans, og strenger er selv-evaluerende.? ? "foo" "foo"? #t #t Symboler evalueres til verdien de navngir (om noen):? foo 42? + #<procedure:+>? bar error (med mindre vi har opprettet en binding tidligere) Lister er prosedyrekall. Det første elementet er en operator som kalles med verdiene til de resterende elementene som argumenter.? (* 10 (+ 2 3)) 50? (bar 1 2) error (med mindre funksonen bar finnes) Men lister kan også være data:? (list 1 2 3) (1 2 3)? (list foo 2 "bar") (42 2 "bar")

56 Program = data 19 Kommentar / frampek I de første to forelesningen skal vi jobbe med enkle matematiske eksempler, men senere i kurset kommer vi til å jobbe masse med lister og symbolske data. Lister har en spesiell rolle i Lisp og Scheme: kan brukes til å representere både data og program. LISP = LISt Processing Lister = data = program.

57 Å opprette egne prosedyrer med define 20 Vi har sett at define kan brukes for å binde leksikalske variabler til en verdi. Men verdien kan også være en prosedyre. Prosedyrer lages ved såkalte lambda-uttrykk.

58 Å opprette egne prosedyrer med define 20 Vi har sett at define kan brukes for å binde leksikalske variabler til en verdi. Men verdien kan også være en prosedyre. Prosedyrer lages ved såkalte lambda-uttrykk. Generell form (define navn (lambda ( argumenter ) kropp )) Eksempel? (define snitt (lambda (x y) (/ (+ x y) 2)))

59 Å opprette egne prosedyrer med define 20 Vi har sett at define kan brukes for å binde leksikalske variabler til en verdi. Men verdien kan også være en prosedyre. Prosedyrer lages ved såkalte lambda-uttrykk. Generell form (define navn (lambda ( argumenter ) kropp )) Eksempel? (define snitt (lambda (x y) (/ (+ x y) 2)))? (snitt 10 20) 15? (snitt (snitt 10 20) (snitt 10 30)) 17.5

60 Å opprette egne prosedyrer med define Vi har sett at define kan brukes for å binde leksikalske variabler til en verdi. Men verdien kan også være en prosedyre. Prosedyrer lages ved såkalte lambda-uttrykk. Generell form (define navn (lambda ( argumenter ) kropp )) Det finnes også en kortform som sløyfer lambda: (define ( navn argumenter ) kropp ) Eksempel? (define snitt (lambda (x y) (/ (+ x y) 2)))? (snitt 10 20) 15? (snitt (snitt 10 20) (snitt 10 30)) 17.5? (define (snitt x y) (/ (+ x y) 2)) 20

61 Predikater og kondisjonale uttrykk 21 Eksempler? (define foo 42)? (even? foo) #t? (zero? foo) #f? (>= foo 42) #t Predikater er prosedyrer eller uttrykk som returnerer sant / usant (#t / #f). F.eks zero?, even?, >, =, etc. Husk at alt unntatt #f teller som sant.

62 Predikater og kondisjonale uttrykk 21 Eksempler? (define foo 42)? (even? foo) #t? (zero? foo) #f? (>= foo 42) #t? (and (< 3 4) (not (zero? 42))) #t Predikater er prosedyrer eller uttrykk som returnerer sant / usant (#t / #f). F.eks zero?, even?, >, =, etc. Husk at alt unntatt #f teller som sant. Med logiske predikater som and, or og not kan vi bygge sammensatte predikater.? (or (>= foo 10) (negative? #t foo))

63 Predikater og kondisjonale uttrykk 21 Eksempler? (define foo 42)? (even? foo) #t? (zero? foo) #f? (>= foo 42) #t? (and (< 3 4) (not (zero? 42))) #t? (or (>= foo 10) (negative? foo)) #t Predikater er prosedyrer eller uttrykk som returnerer sant / usant (#t / #f). F.eks zero?, even?, >, =, etc. Husk at alt unntatt #f teller som sant. Med logiske predikater som and, or og not kan vi bygge sammensatte predikater. Sammen med kondisjonale uttrykk som f.eks if og cond kan vi bruke predikater til å kontrollere flyten i et program.

64 Predikater og kondisjonale uttrykk (forst.) 22 Eksempler? (define foo 42) Generell form? (define foo 42)? (if (number? foo) "number" "something else") "number"? (cond ((< foo 3) "less") ((> foo 3) "greater") (else "equal")) "greater" (if predikat utfall-hvis-sant utfall-hvis-usant ) (cond ( predikat 1 utfall 1 ) ( predikat 2 utfall 2 ) ( predikat n utfall n ) (else utfall ))

65 xkcd on Lisp 23

INF2810: Funksjonell programmering: Introduksjon

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?

Detaljer

INF2810: Funksjonell Programmering. Introduksjon

INF2810: 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

Detaljer

INF2810: Funksjonell Programmering. Introduksjon

INF2810: 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

Detaljer

INF2810: Funksjonell Programmering. Introduksjon

INF2810: Funksjonell Programmering. Introduksjon NF2810: Funksjonell programmering NF2810: Funksjonell Programmering ntroduksjon Erik Velldal Universitetet i Oslo 22. januar 2015 Tema for i dag ntroduksjon Praktiske detaljer Grupper Obliger Lærebok Hva

Detaljer

INF2810: Funksjonell Programmering. Introduksjon

INF2810: Funksjonell Programmering. Introduksjon INF2810: Funksjonell Programmering Introduksjon Stephan Oepen Universitetet i Oslo 19. januar 2016 Nummer 2 Erik Guro (March 16, 2015) I Erik kommer tilbake etter påske; blir så foreleser ut semesteret.

Detaljer

INF2810: Funksjonell Programmering. En metasirkulær evaluator

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

Detaljer

INF2810: Funksjonell Programmering. En metasirkulær evaluator

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

Detaljer

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme

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

Detaljer

INF2810: Funksjonell programmering: Mer om Scheme. Rekursjon og iterasjon.

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

Detaljer

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme

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

Detaljer

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme, del 2

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

Detaljer

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme, del 2

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

Detaljer

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme, del 2

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

Detaljer

INF2810: Funksjonell Programmering

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

Detaljer

INF2810: Funksjonell Programmering. En metasirkulær evaluator, del 2

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

Detaljer

INF2810: Funksjonell Programmering. En metasirkulær evaluator, del 2

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

Detaljer

INF2810: Funksjonell Programmering

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

Detaljer

Rekursjon og lister. Stephan Oepen & Erik Velldal. 1. februar, Universitetet i Oslo

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

Detaljer

INF2810: Funksjonell Programmering

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

Detaljer

INF2810: Funksjonell Programmering. Tilstand og verditilordning

INF2810: 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.

Detaljer

INF2810: Funksjonell Programmering

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

Detaljer

INF2810: Funksjonell Programmering. Oppsummering og eksamensforberedelser

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

Detaljer

INF2810: Funksjonell Programmering. Oppsummering og eksamensforberedelser

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

Detaljer

INF2810: Funksjonell Programmering. Tilstand og verditilordning

INF2810: 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

Detaljer

INF2810: Funksjonell Programmering. Tilstand og verditilordning

INF2810: 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

Detaljer

INF2810: Funksjonell Programmering. Lister og høyereordens prosedyrer

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.

Detaljer

INF2810: Funksjonell Programmering

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

Detaljer

INF2810: Funksjonell Programmering. Mengder og lokal tilstand

INF2810: 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

Detaljer

INF2810: Funksjonell Programmering. Oppsummering og eksamensforberedelser

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

Detaljer

INF2810: Funksjonell Programmering. Lokale variabler. Og trær.

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

Detaljer

INF2810: Funksjonell Programmering

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

Detaljer

INF2810: Funksjonell Programmering. Lokale variabler. Og trær.

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

Detaljer

INF2810: Funksjonell Programmering. Kommentarer til prøveeksamen

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!

Detaljer

Høyere-ordens prosedyrer

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

Detaljer

INF2810: Funksjonell Programmering. Oppsummering og eksamensforberedelser

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

Detaljer

INF2810: Funksjonell Programmering. Tilstand og verditilordning

INF2810: 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

Detaljer

INF2810: Funksjonell Programmering. Oppsummering og eksamensforberedelser

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

Detaljer

INF2810: Funksjonell Programmering. Dataabstraksjon og Trerekursjon

INF2810: 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

Detaljer

INF2810: Funksjonell Programmering. Lister og høyereordens prosedyrer

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

Detaljer

INF2810: Funksjonell Programmering. Eksamensforberedelser

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

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET 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)

Detaljer

INF2810: Funksjonell Programmering. Mer om verditilordning og muterbare data.

INF2810: 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

Detaljer

INF2810: Funksjonell Programmering. Mer om verditilordning og muterbare data.

INF2810: 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

Detaljer

INF2810: Funksjonell Programmering. Mer om Scheme. Rekursjon og iterasjon.

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

Detaljer

INF2810: Funksjonell Programmering. Muterbare data

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:

Detaljer

INF2810: Funksjonell Programmering. Mer om Scheme. Rekursjon og iterasjon.

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

Detaljer

Innlevering 2a i INF2810, vår 2017

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

Detaljer

INF2810: Funksjonell Programmering. Strømmer og utsatt evaluering

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

Detaljer

UNIVERSITETET I OSLO

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:

Detaljer

INF2810: Funksjonell Programmering. Køer, tabeller, og (litt om) parallelitet

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

Detaljer

INF2810: Funksjonell Programmering. Mer om verditilordning. Tabeller. Og strømmer.

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

Detaljer

INF2810: Funksjonell Programmering. Køer, tabeller, og (litt om) parallelitet

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

Detaljer

INF2810: Funksjonell Programmering. Mer om verditilordning. Tabeller. Og strømmer.

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

Detaljer

LISP PVV-kurs 25. oktober 2012

LISP 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

Detaljer

INF2810: Funksjonell Programmering. Strømmer og utsatt evaluering

INF2810: 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,

Detaljer

INF2810: Funksjonell Programmering. Utsatt evaluering og strømmer

INF2810: 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

Detaljer

INF2810: Funksjonell Programmering. Trær og mengder

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

Detaljer

INF2810: Funksjonell Programmering. Mer om Scheme. Rekursjon og iterasjon.

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

Detaljer

INF2810: Funksjonell Programmering. Utsatt evaluering og strømmer

INF2810: 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

Detaljer

INF2810: Funksjonell Programmering. Mer om strømmer

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

Detaljer

INF2810: Funksjonell Programmering. Utsatt evaluering og strømmer

INF2810: 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

Detaljer

Eksamen i SLI230, vår 2003.

Eksamen 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

Detaljer

INF2810: Funksjonell Programmering. Mer om strømmer

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

Detaljer

Innlevering 2b i INF2810, vår 2017

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.

Detaljer

INF2810: Funksjonell Programmering. Utsatt evaluering og strømmer

INF2810: 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

Detaljer

INF2810: Funksjonell Programmering. Trær og mengder

INF2810: 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

Detaljer

LISP PVV-kurs 11. mars 2010

LISP PVV-kurs 11. mars 2010 LISP PVV-kurs 11. mars 2010 LISP has jokingly been described as the most intelligent way to misuse a computer. I think that description a great compliment because it transmits the full flavor of liberation:

Detaljer

INF2810: Funksjonell Programmering. Trær og mengder

INF2810: 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

Detaljer

INF2810: Funksjonell Programmering. Strømmer

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

Detaljer

INF2810: Funksjonell Programmering. Strømmer

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

Detaljer

Moderne Funksjonell Programmering i Lisp

Moderne 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.

Detaljer

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python

TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python TDT4110 Informasjonsteknologi, grunnkurs Uke 35 Introduksjon til programmering i Python Professor Guttorm Sindre Institutt for datateknikk og informasjonsvitenskap Læringsmål og pensum Mål Vite hva et

Detaljer

INF2810: Funksjonell Programmering. Eksamensforberedelser

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

Detaljer

TDT4105 Informasjonsteknologi, grunnkurs. Introduksjon til programmering i Matlab

TDT4105 Informasjonsteknologi, grunnkurs. Introduksjon til programmering i Matlab 1 Kunnskap for en bedre verden TDT4105 Informasjonsteknologi, grunnkurs Introduksjon til programmering i Matlab Amanuensis Terje Rydland Kontor: ITV-021 i IT-bygget vest (Gløshaugen) Epost: terjery@idi.ntnu.no

Detaljer

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

TDT4105 Informasjonsteknologi, grunnkurs (ITGK) 1 TDT4105 Informasjonsteknologi, grunnkurs (ITGK) Introduksjon til programmering i Matlab Rune Sætre satre@idi.ntnu.no 2 Læringsmål og pensum Mål Lære om programmering og hva et program er Lære å designe

Detaljer

INF2810: Funksjonell Programmering. Huffman-koding

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:

Detaljer

INF3110 Programmeringsspråk. Dagens tema. Typer (Kapittel 3 frem til ) Innføring i ML (Kapittel & ML-kompendiet.) 1/19

INF3110 Programmeringsspråk. Dagens tema. Typer (Kapittel 3 frem til ) Innføring i ML (Kapittel & ML-kompendiet.) 1/19 Dagens tema Typer (Kapittel 3 frem til 3.3.1.) Innføring i ML (Kapittel 7.4.3 & ML-kompendiet.) 1/19 Forelesning 2 27.8.2003 Typer En (data-)type består av: en mengde verdier en mengde operasjoner man

Detaljer

Typer. 1 Type: boolean. 2 Verdimengde: {true, false} 3 Operatorer: NOT, AND, OR... 1/19. Forelesning Forelesning

Typer. 1 Type: boolean. 2 Verdimengde: {true, false} 3 Operatorer: NOT, AND, OR... 1/19. Forelesning Forelesning Dagens tema Typer (Kapittel 3 frem til 331) Innføring i ML (Kapittel 743 & ML-kompendiet) Typer En (data-)type består av: en mengde verdier en mengde operasjoner man kan anvende på disse verdiene Eksempel:

Detaljer

TDT4105 Informasjonsteknologi, grunnkurs (ITGK)

TDT4105 Informasjonsteknologi, grunnkurs (ITGK) 1 TDT4105 Informasjonsteknologi, grunnkurs (ITGK) Introduksjon til programmering i Matlab Rune Sætre satre@idi.ntnu.no 3 Læringsmål og pensum Mål Lære om programmering og hva et program er Lære om hvordan

Detaljer

INF1000 undervisningen INF 1000 høsten 2011 Uke september

INF1000 undervisningen INF 1000 høsten 2011 Uke september INF1000 undervisningen INF 1000 høsten 2011 Uke 2 30. september Grunnkurs i Objektorientert Programmering Institutt for Informatikk Universitetet i Oslo Siri Moe Jensen og Arne Maus Forelesningene: Første

Detaljer

INF 1000 høsten 2011 Uke september

INF 1000 høsten 2011 Uke september INF 1000 høsten 2011 Uke 2 30. september Grunnkurs i Objektorientert Programmering Institutt for Informatikk Universitetet i Oslo Siri Moe Jensen og Arne Maus 1 INF1000 undervisningen Forelesningene: Første

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET 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

Detaljer

156C. Algoritmer og maskinspråk. IT1101 Informatikk basisfag. Maskinspråk: det maskinen forstår. Assembler / assemblerspråk

156C. Algoritmer og maskinspråk. IT1101 Informatikk basisfag. Maskinspråk: det maskinen forstår. Assembler / assemblerspråk IT1101 Informatikk basisfag I dag Programmeringsspråk Problemer med maskinspråk I dag: 5.1-5.3 Fra lavnivå til høynivå programmeringsspråk - utvikling Kompilator / tolker Programmeringsparadigmer Tradisjonelle

Detaljer

INF2810: Funksjonell Programmering. Huffman-koding

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

Detaljer

Python: Intro til funksjoner. TDT4110 IT Grunnkurs Professor Guttorm Sindre

Python: Intro til funksjoner. TDT4110 IT Grunnkurs Professor Guttorm Sindre Python: Intro til funksjoner TDT4110 IT Grunnkurs Professor Guttorm Sindre Snart referansegruppemøte Viktig mulighet for å gi tilbakemelding på emnet Pensumbøker Forelesninger Øvingsforelesninger Veiledning

Detaljer

Hjemmeeksamen 2 i INF3110/4110

Hjemmeeksamen 2 i INF3110/4110 Hjemmeeksamen 2 i INF3110/4110 Innleveringsfrist: onsdag 19. november kl. 1400 Innlevering Besvarelsen av oppgave 2,3,4 og 5 skal leveres skriftlig på papir i IFI-ekspedisjonen. Merk denne med navn, kurskode,

Detaljer

Dagens plan INF3170 Logikk. Obliger og eksamen. Forelesning 1: Introduksjon, mengdelære og utsagnslogikk. Christian Mahesh Hansen og Roger Antonsen

Dagens plan INF3170 Logikk. Obliger og eksamen. Forelesning 1: Introduksjon, mengdelære og utsagnslogikk. Christian Mahesh Hansen og Roger Antonsen Dagens plan INF3170 Logikk Forelesning 1: Introduksjon, mengdelære og utsagnslogikk Christian Mahesh Hansen og Roger Antonsen Institutt for informatikk, Universitetet i Oslo 1 Praktisk informasjon 2 23.

Detaljer

Lisp 3: Spesielle former, variabler, imperativ programmering

Lisp 3: Spesielle former, variabler, imperativ programmering Lisp 3: Spesielle former, variabler, imperativ programmering Eirik Alderslyst Nygaard Øystein Ingmar Skartsæterhagen Programvareverkstedet 11. mars 2010 (Evaluering av former) (De spesielle operatorene)

Detaljer

INF2810: Funksjonell Programmering. Huffman-koding

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

Detaljer

MAT1030 Diskret Matematikk

MAT1030 Diskret Matematikk MAT1030 Diskret Matematikk Forelesning 26: Trær Roger Antonsen Institutt for informatikk, Universitetet i Oslo 5. mai 2009 (Sist oppdatert: 2009-05-06 22:27) Forelesning 26 MAT1030 Diskret Matematikk 5.

Detaljer

Feilmeldinger, brukerinput og kontrollflyt

Feilmeldinger, brukerinput og kontrollflyt Feilmeldinger, brukerinput og kontrollflyt Skjønne hvordan et program presist utføres og forberede seg på håndtering av feil INF1000, uke2 Ragnhild Kobro Runde Programmeringskrøll Programmet vil ikke kjøre

Detaljer

Læringsmål og pensum. if (be): else (not_to_be):

Læringsmål og pensum. if (be): else (not_to_be): 1 TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk - 3rd edition: Kapittel 3 Professor Alf Inge Wang 2 if (be): else (not_to_be): 3 Læringsmål og pensum Mål Lære å bruke og

Detaljer

Ta kontakt i pausen. Viktig at vi kommer i gang med dette arbeidet!

Ta kontakt i pausen. Viktig at vi kommer i gang med dette arbeidet! 1 Kunnskap for en bedre verden TDT4105 Informasjonsteknologi, grunnkurs Mer om funksjoner. Logiske betingelser og betinget programutførelse (valg). Amanuensis Terje Rydland Kontor: ITV-021 i IT-bygget

Detaljer

MAT1030 Diskret Matematikk

MAT1030 Diskret Matematikk MAT1030 Diskret Matematikk Plenumsregning 1: Kapittel 1 Mathias Barra Matematisk institutt, Universitetet i Oslo 16. januar 2009 (Sist oppdatert: 2009-02-02 14:21) Plenumsregning 1 MAT1030 Diskret Matematikk

Detaljer

TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk Utgave 3: Kap. 3

TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk Utgave 3: Kap. 3 1 Kunnskap for en bedre verden TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk Utgave 3: Kap. 3 Terje Rydland - IDI/NTNU 2 if (be): else (not_to_be): 3 Læringsmål og pensum

Detaljer

if (be): else (not_to_be): TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk Utgave 3: Kap.

if (be): else (not_to_be): TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk Utgave 3: Kap. 1 Kunnskap for en bedre verden TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk Utgave 3: Kap. 3 Terje Rydland - IDI/NTNU 2 if (be): else (not_to_be): 3 Læringsmål og pensum

Detaljer

MAT1030 Plenumsregning 1

MAT1030 Plenumsregning 1 MAT1030 Plenumsregning 1 Kapittel 1 Mathias Barra - 16. januar 2009 (Sist oppdatert: 2009-02-02 14:21) Plenumsregning 1 Velkommen til plenumsregning for MAT1030 Fredager 12:15 14:00 Vi vil gjennomgå utvalgte

Detaljer

INF2810: Funksjonell Programmering. Lister og høyereordens prosedyrer

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

Detaljer

TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk. - 3rd edition: Kapittel 3. Professor Alf Inge Wang

TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk. - 3rd edition: Kapittel 3. Professor Alf Inge Wang 1 TDT4110 Informasjonsteknologi grunnkurs: Tema: Betingelser og logiske uttrykk - 3rd edition: Kapittel 3 Professor Alf Inge Wang 2 if (be): else (not_to_be): 3 Læringsmål og pensum Mål Lære å bruke og

Detaljer

Ark 1 av 18. programmeringsspråkenes. Velkommen til IN 211. verden. IN 211 Programmeringsspråk

Ark 1 av 18. programmeringsspråkenes. Velkommen til IN 211. verden. IN 211 Programmeringsspråk Ark 1 av 18 IN 211 Programmeringsspråk Velkommen til programmeringsspråkenes verden IN 211 Forelesning 20.8.2001 Foreleser Ragnhild Kobro Runde E-post: ragnhilk@ifi.uio.no Kontor: 3345 Treffetid: torsdager

Detaljer