INF2810: Funksjonell programmering INF2810: Funksjonell Programmering Oppsummering og eksamensforberedelser Erik Velldal & Stephan Oepen Universitetet i Oslo 31. mai 2016 I dag Kort oppsummering Praktisk om eksamen Hvem vant konkurransen om flest oblig-poeng gjennom semesteret? Prøveeksamen: Spørsmål og svar. 2
Noen knagger Abstraksjon Rekursjon Prosedyreorientering Evaluering Funksjonell programmering 3 Abstraksjon Abstraksjon for å kontrollere kompleksitet (skjuler og isolerer). Kan se på prosedyredefinisjoner som en abstraksjon: Kode som bruker square bryr seg ikke om hvordan den utfører kvadreringen så lenge den returnerer det den lover. Generelle mønstre for bruk av prosedyrer, abstrahert til høyereordens-prosedyrer. Abstraksjonsbarrierer mellom ulike deler av et program. Abstrakte datastrukturer definert utfra et sett av operasjoner vi kan utføre på dem; Grensesnittet gjemmer implementasjons-detaljene. F.eks; prosedyrer som opererer på en representasjon av mengder; bygget på binærtrær; bygget på lister; bygget på par; bygget på lambda. Metalingvistisk abstraksjon 4
Rekursjon 5 Rekursjon Rekursive definisjoner av prosedyrer Direkte rekursjon og gjensidig rekursjon Prosedyre vs prosess Rekursive og trerekursive prosesser Iterative prosesser Kompleksitet Ulike typer idiomer for rekursjon, f.eks; over tall, over lister, over trær,... inn / ut, basistilfeller, utsatt evaluering, halerekursjon, m.m. Rekursiv oppbygging av datastrukturer Liste den tomme lista eller et par der cdr er en liste. Rekursivt definerte datastrukturer (define ones (cons-stream 1 ones)) Metasirkulær evaluator Lisp-program for å evaluere Lisp-program 6
Prosedyreorientering Prosedyrer som 1.klasses objekter Høyereordens prosedyrer: andre prosedyrer som argumenter / returverdi Lambda-uttrykk; navngitte og anonyme prosedyrer let og lokale variabler via anonyme prosedyrer Prosedyrebasert objektorientering + lokal tilstand via innkapsling + verditilordning Prosedyrer som datastrukturer (f.eks cons-celler)λ 7 Evaluering av kode Evalueringsregler Substitusjonsmodellen Omgivelsesmodellen Metasirkulær evaluator Utsatt evaluering Memoisering Eager/Applicative-order vs Lazy/normal-order evaluation Kode som data 8
Funksjonell programmering med noe imperativt attåt Hovedfokus: Funksjonell programmering. Prosedyrer som spesifikasjon for å beregne matematiske funksjoner: Alltid samme resultat gitt samme argumenter. Beregninger utføres som funksjonelle transformasjoner av data (i stedet for destruktive endringer av tilstandsvariabler). En prosedyre kalles for sin returverdi alene: ingen side-effekter. Semantikken til uttrykk uavhengig av hvor / når de brukes: tidspunkt for evaluering uten betydning. La så til muterbare datastrukturer og destruktive operasjoner for modellering av endringer i tid og lokal tilstand. Funksjonell transformasjon vs destruksjon / verdiendring. 9 Praktisk om eksamen Når? Fredag 10. juni kl. 14:30 (4 timer). Hvor? God spredning: Store fysiske lesesal, PC-avd. Fysikkbygningen Gymsal 1 Idrettsbygningen Gymsal 2 Idrettsbygningen Gymsal 3 Idrettsbygningen Gymsal 4 Idrettsbygningen Leseal 4613 Kristine Bonnevies hus (Biologibygn.) Sjekk i StudentWeb hvor du skal sitte! Hjelpemidler: Ingen. Pensum: Forelesningsnotatene + seksjonene vi har gjennomgått fra SICP; se nøyaktig oversikt på emnesiden: www.uio.no/studier/emner/matnat/ifi/inf2810/v16/pensumliste/ NB: Sjekk også i StudentWeb at du faktisk er oppmeldt! 10
Siste gruppetime Gruppelærerne Håkon og Vegard har en siste gruppetime onsdag 1/6 kl 12.15 14.00 på Fortress (rom 3468) Repetisjon og ønskerepriser. Plan: Repetisjon av utvalgte temaer, kom gjerne med ønsker i tråden på Piazza. Gjennomgang av utvalgte oppgaver fra eksamen 2014 og 2015. Stor Kahoot! med spørsmål fra hele pensum. Mulighet til å stille spørsmål. 11 Trommevirvel og fanfare! 65 mulige poeng. Disse sanket inn flest oblig-poeng igjennom semesteret og vinner tradisjonen tro en rekursiv t-skjorte: 1. Eivind Alexander Bergem (61p) 2. Tony Valle (58p) Matias Hermanrud Fjeld (58p) Kristine Jevne Berge (58p) Jan Inge Lamo (58p) Morten Aske Kolstad (58p) 3. Ingvild Larsen (57p) 12
You might also like... INF4820 Algoritmer for kunstig intelligens og naturlige språk Generelle teknikker for mønstergjennkjenning, maskinlæring, klassifikasjon, kunnskapsrepresentasjon, dynamisk programmering, memoisering, m.m. Særlig vekt på algoritmer og datastrukturer for analyse av naturlige språk. Fokus på praktisk implementasjon, i Common Lisp. Gis hver høst av Erik Velldal og/eller Stephan Oepen. www.uio.no/studier/emner/matnat/ifi/inf4820 13 En beskjed fra FUI FUI har nå sendt ut invitasjoner til kursevaluering. Det betyr mye at dere svarer! Midtveisevalueringen er bare til kursinternt bruk: FUIs kursevaluering er mer omfattende og synlig på instituttnivå. https://nettskjema.uio.no/answer/73097.html 14
Prøveeksamen: oppgaver med løsningsforslag