Et t ilst andsrom er en representasjon av en problemløsningsstruktur.

Størrelse: px
Begynne med side:

Download "Et t ilst andsrom er en representasjon av en problemløsningsstruktur."

Transkript

1 Kunstig intelligens (MNFIT-272) Forelesning 3 Emner: Problemløsning som søking - generell søk - heuristisk søk AI språk - egenskaper generelt - Prolog -Lisp TILSTANDSROM måltilstander mellomtilstander starttilstand Et t ilst andsrom er en representasjon av en problemløsningsstruktur. Et tilstandsrom er definert ved: en start -tilstand en eller flere mål-tilstander etsettavmellomtilstander etsettavoperatorersomanvendtpåentilstand gir et sett av mulige etterfølgende tilstander

2 SØKING I TILSTANDSROM måltilstander mellomtilstander starttilstand traverserte søkeveier mislykkede noder aktive noder node der testing pågår Sentralt i enhver AI-metode er en eller flere søkestrategier for traversering av tilsstandsrommet (søkerommet) fra en starttilstand til en egnet måltilstand. Søking, generelt: Generelle metoder for søking i tilstandsrom: ³ å undersøke alle nabo-nodene først, deretter alle nabo-nodenes naboer, osv. -> bredde-først søk ³ å undersøke en av nabo-nodene først, deretter en av dennes naboer, osv. -> dybde-først søk Etterfølgende noder langs en søkevei kalles ofte barn-noder (children nodes), mens forutgående noder ofte kalles foreldre-noder (parent nodes). Noder som ligger 'på samme nivå', dvs. like mange nivåer fra en gitt node, kalles søsken-noder (siblings).

3 For begge søke-algoritmene gjelder: Benytter to hjelpe-lister for midlertidig lagring: ³ open for noder som er påtruffet men ikke undersøkt ennå ³ closed for noder som er undersøkt Utganstilstand: open inneholder startnoden closed er tom Listebehandling: - noder som er undersøkt flyttes fra open til closed - alle nye nabo-noder legges på open listen - neste node til undersøking er er alltid første node i open listen Sluttilstand: open er tom closed inneholder alle noder som er undersøkt, enten de ligger på løsningsveien eller ikke Informasjon om søkeveien så langt lagres normal ikke Bredde først søk (breadth first search) Undersøker søkerommet nivå for nivå inntil a) en tilstand som tilfredsstiller kravene til slutt-tilstand er funnet (-> suksessfylt søk) b) alle de fjerneste nodene (bunn-nodene) er undersøkt (-> mislykket søk) "- alle nye nabo-noder legges på open listen" ³ nye noder legges til slutten av listen ³ open listen er en kø

4 Dybde først søk (depth first search) Undersøker søkerommet ved å følge en vei 'helt til bunns' før neste mulighet prøves inntil: a) en tilstand som tilfredsstiller kravene til slutt-tilstand er funnet (-> suksessfylt søk) b) alle nodene er undersøkt (-> mislykket søk) "- alle nye nabo-noder legges på open listen" ³ nye noder legges til begynnelsen av listen ³ open listen er en stakk Ikke garantert å finne korteste vei Bredde-først og dybde-først søk er uttømmende (exhaustive) søkemetoder Forbredde-først søk øker søkerommets størrelse eksponensielt med søkets veilengde (Ant. tilstander når nivå n undersøkes er B n, B er forgreningsfaktor) Bredde-først søk er garantert å finne korteste vei Fordybde-først søk øker søkerommets størrelse lineært med søkets veilengde (Ant. tilstander når nivå n undersøkes er B x n) Dybde-først søk er ikke garantert å finne korteste vei Valg av egnet søkemetode er avhengig av søkerommets form For store søkerom kan begrensninger innføres i form av: - begrenset antall nivåer - begrenset resurssforbruk -tid - minnekapasitet

5 I grafer behandlet hittil har vi betraktet en relasjon mellom to tilstander som en frittstående og selvstendig relasjon, uavhengig av andre relasjoner. And/Or graf En OR-node er knyttet til foreldre-noden via en selvstendig relasjon (som i grafer hittil) En AND-node er knyttet til et sett av nabo-noder via et samlet sett av relasjoner And/Or trær er den mest vanlige formen. Denne strukturen er velegnet for å representere søkerommet for mange typer problemer: - matematisk teorembevis - regelbaserte ekspertsystemer - gramatikalsk analyse av setninger - spill -> i det hele tatt der hvor et problem kan dekomponeres i del-problemer, som kan løses på forskjellige måter - inkludert å dekomponeres i nye del-problemer, etc. And/Or trær kalles ofte mål-trær (goal trees) AI språk Spesielt utviklet for å kunne behandle symbolstrukturer. Et AI språk er utviklet for ett bestemt beskrivelsesnivå. - Kunnskapsnivå-språk støtter analyse og modellering på et konseptuelt - og intensjonelt - nivå. Ofte endel av et system eller en metodologi for kunnskapsakkvisisjon i generell forstand. Eksempler spenner fra grafiske editorer, der visualisering er sentralt, til formelle språk der sjekking av konsistens etc. er sentralt.

6 AI språk (forts.) - Symbolnivå-språk støtter programmering og implementasjon. En kan skille mellom to typer språk: - Generelle programmeringsspråk (Lisp, Prolog, Smalltalk, Java, C++, C, Pascal, Fortran,...) - Spesielle høynivå-språk og KBS-skall (KEE, ART, Nexpert Object, CLIPS, KappaPC,...) Krav til AI språk: Behandler her kun symbolnivå-språk. 1. Støtte til symbolbehandling 2. Fleksibilitet 3. Støtte til eksplorativ programmering 4. Sen binding av variable 5. Veldefinert semantikk

7 1. Støtte til symbolbehandling Symbolbehandling innebærer evne til å representere, generere, og operere på symbolske uttrykk og strukturer av slike. Mønster-gjenkjenning (pattern matching) er sentralt - matching av beskrivelser og tilstander i søkerommet, hel eller delvis match. Liste-behandling er sentralt - lister er egnet til lagring av symbolstrukturer, uansett kompleksitet 2. Fleksibilitet Lett modifiserbare symbol-representasjoner Data-drevet kontroll av eksekveringen Bruker-spesifisert programkontroll

8 3. Støtte til eksplorativ programmering Gradvis definering av problemet - AI programmer angriper komplekse problemer. Gradvis definering av problemløsningen - heuristiske metoder, i motsetning til algoritmiske, er empiriske. Gradvis utforming av AI-metodene - valg og tilpasning av representasjon og resonneringsmetoder krever ofte prøving og feiling. Et språk for eksplorativ programmering bør: - være modulært - være utvidbart - ha gode abstraksjonsmekanismer - støtte rask prototyping - ha lett lesbare programmer - være interpreterbart - støttes av en effektiv programmeringsomgivelse 4. Sen binding av variable Manipulering av variable uten å ha angitt verdi eller verdi-type. Gradvis tilordning av typer og verdier til variable. Verdier eller typer angis til å begynne med som beskrankninger (constraints), som så influerer på verdiene til relaterte variable, osv. (constraint propagation).

9 5. Veldefinert språk-semantikk Enkel, klart forståelig språk-semantikk er en fordel. Eksempler er 'Horn clause' logikk (Prolog), og rekursiv funksjonsteori (Lisp). Pascal og Fortran, f.eks. har mer kompleks og uoversiktig semantikk. Siden AI programmer ofte utfører en kompleks behandling, er det dessto viktigere at programmeringsspråket er enkelt bydg opp, og benyttes på en mest mulig klar og oversiktlig måte. PROLOG Basis: Matematisk logikk, 1. ordens predikatlogikk Et Prolog program er et sett av fakta-uttrykk og implikasjoner: father(haakon,olav). male(olav). son(x,y) :- father(y,x), male(x). En eksekvering av et Prolog program er en logisk deduksjon utifra et startbegrep (goal): son(olav,x).

10 PROLOG (forts.) Deduksjon i et Prolog-program er basert på 'resolusjons'-algoritmen for teorembevis. Det fins også andre deduktive bevis-algoritmer. Mange som arbeider med logikk-programmering utfra andre bevis-algortimer enn 'resolusjon', benytter Lisp som programmeringsspråk. Prolog er et deklarativt språk Satt på spissen: "make declarations, not programs" LISP Basis: Matematisk teori for rekursive funksjoner, lambda-kalkyle. Et Lisp program er et sett av funksjonsdefinisjoner og funksjonskall. En funksjonsdefinisjon består av et sett funksjonskall til andre definerte funksjoner, rekursivt: (push '(haakon olav) fathers) (push 'olav males) (defun is-father-of? (person-1 person-2) (equal person-2 (second (assoc person-1 fathers)))) (defun is-son-of? (person-1 person-2) (and (member person-1 males) (is-father-of? person-2 person-1))) (defun son-of (person) (second (assoc person fathers)))

11 LISP (forts.) En eksekvering av et Lisp program er kall av en funksjon, hvis argumenter kan være kall til andre funksjoner, etc., rekursivt: (is-son-of? (son-of 'haakon) (father-of (son-of 'haakon))) Lisp er et funksjonelt språk Satt på spissen: "make functions, not assignments" LISP - basiselementer: s-expression atom list number symbol En liste er en sekvens av atomer og/eller andre lister adskilt av blanke tegn og innesluttet i parentes. Lister kan være nøstet i et uspesifisert antall nivåer

12 Basiselementer (forts.) Funksjonsdefinisjoner, dvs. programmer, såvel som datastrukturer er lister. - Programmer og data er av samme type, dvs. programmer kan tolkes som data og omvendt. Datatyper tilordnes verdier, ikkevariable Den tomme listen, dvs. () eller NIL har en spesiell rolle. Benytter dynamisk plass-allokering. "Garbarge collection" frigjør tidligere okkupert plass. LISP - basismekanismer Read - Eval - Print løkken er grunnmekanismen for eksekvering av Lisp programmer: Read - et uttrykk (s-expression) leses inn Eval - uttrykket evalueres Print - returnert resultat skrives ut Eval er selve Lisp interpretatoren. Evaluering innebærer alltid at en verdi returneres. Dette gjelder for alle Lisp-uttrykk: et tall evalueres til seg selv - tallverdien returneres et symbol evalueres til verdien det er bundet til en liste evalueres ved at første element tolkes som et funksjonsnavn resterende elementer tolkes som argumenter I tillegg har mange funksjoner sideeffekter, som medfører større eller mindre endringer i den globale lisp-omgivelsen ('working memory' om du vil).

13 LISP - basisfunksjoner Listebehandling: cons car cdr Evalueringskontroll: eval quote Inn/Ut: read print + ofte brukt list, append, remove cadr, caaddr, cdadr,.. first, second,.., last, nth funcall, apply, ', #' format Funksjonsdefinisjoner: defun lambda Prosedyrekontroll: do return Testing: cond equal atom listp Verditilordning: let set dolist, dotimes if, while, unless >, <=, = numberp, symbolp,... progn Side-effekter, Bindinger (funk-1 (funk-2 (funk-3 (funk-4...)...)...)...) En funksjon som utføres returnerer en verdi. Verdien gis tilbake til den kallende funksjonen, som igjen returnerer en verdi som gis tilbake til denne funksjonens kallende funksjon, osv. opp til topp-nivået i funksjonskall-kjeden. Mange Lisp funksjoner har i tillegg side-effekter, dvs. at det skjer ting når en funksjon utføres som ikke fanges opp av retur-verdien. Eksempler: (setq a 'b) ; returnerer: b ; side-effekt: symbolet a bindes til ; symbolet b

14 Side-effekter (forts.) (defun a (n) (+ n 1)) ; returnerer symbolet a ; side-effekt: binder funksjons- ; definisjonen til a Funksjonene over benyttes kun pga. sine side-effekter. (let ((a 'b) (c 2)) (list a c)) ; returnerer listen (b 2) ; side-effekt: ingen let benyttes for å definere lokale variable inni en funksjon, og å gi dem initielle verdier setq benyttes for å definere globale variable, og for å endre verdien til variable innen en let blokk RekursjonogLisp Et rekursivt program er et program som kaller seg selv. En rekursiv funksjon er en funksjon som er definert ved seg selv. Rekursive definisjoner er problemfrie såsant det fins et 'uthopp' fra rekursjonen, dvs. et test-kriterium som fører til at rekursjonsprosessen terminerer. Lisp's listebehandlings-egenskaper gjør rekursjon til en relativt enkel og naturlig programmeringsmekanisme for symbolbehandling.

15 RekursjonogLisp(forts.) Prinsippet for rekursiv listebehandling er: Funksjonen kalles med den aktuelle listen som ett av argumentene. Det sjekkes om terminerings-kriteriet er oppfylt. Funksjonen utføres ved å kombinere en operasjon på første element i argument-listen med et kall til funksjonen (seg selv) utført på de resterende elementer i listen. Rekursjon - eksempler Eksempel 1 For å utføre en operasjon på hvert element i en liste: 1. Hvis listen er tom, stopp. 2. Utfør operasjonen på første element i listen, og kall funksjonen med resten av listen som argument. ;;; Funksjon for å finne antall elementer i en liste (defun count-elements (liste) (cond ((null liste) 0) (t (+ 1 (count-elements (cdr liste)))))) Eksempel 2 For å utføre en operasjon på hvert element inntil en test slår til: 1. Hvis listen er tom, stopp og returner at test mislyktes. 2. Hvis testen slår til, stopp og returner aktuelt resultat, hvis ikke, kall funksjonen med resten av listen som argument. ;;; Funksjon for å sjekke om et gitt element er medlem av en liste: (defun my-member (element liste) (cond ((null liste) nil) ((equal element (car liste)) t) (t (my-member element (cdr liste)))))

16 Rekursjon - eksempler (forts.) En funksjon kan kalle seg selv rekursivt flere steder i funksjonskroppen. Eksempel 3 ;;; Funksjon for å fjerne negative tall i en liste. Det rekursive ;;; kallet utføres både hvis testen slår til, og hvis den ikke gjør ;;; det: (defun filter-negatives (liste) (cond ((null liste) nil) ((plusp (car liste)) (cons (car liste) (filter-negatives (cdr liste)))) (t (filter-negatives (cdr liste))))) Numeriske funksjoner Det er ikke bare for listebehandling at rekursive definisjoner er velegnet: ;;; Funksjon for å beregne fakultet av et tall, ;;; n! = 1*2*3*4*5*...*(n-1)*n (defun fac (n) (cond ((= n 0) 1) (t (* n (fac (- n 1)))))) Kombinert car / cdr rekursjon Hvis elementer i en liste kan være lister, og underliggende liste-nivåer også skal behandles, er kombinert car- og cdrrekursjon en metode som utnytter rekursivitet maksimalt. ;;; Funksjon for å telle opp antall atomære elementer i en ;;; liste, uansett på hvilket under-nivå de befinner seg (defuncount-atoms(liste) (cond ((nullliste)0) ((atomliste)1) (t(+(count-atoms(carliste)) (count-atoms(cdrliste)))))) ;;; Funksjon for å 'flate ut' en liste, dvs. fjerne alle ;;; under-nivåer (defunflatten(liste) (cond ((nullliste)nil) ((atomliste)(listliste)) (t(append(flatten(carliste)) (flatten(cdrliste))))))

17 Iterasjon: Rekursjon er ikke eneste metoden for å utføre repeterende programtrinn i Lisp. - Men ofte den enkleste - såsant en har trening i å tenke rekursivt! Vanligste iterasjons -funksjoner: - do dolist dotimes -mapcar (dolist (<var> <list> <result>) (<body>)) (defun count-elements (liste) (let ((len 0)) (dolist (element liste len) (setq len (+ len 1))))) (do ((<var 1> <init 1> <update 1>) (<var 2> <init 2> <update 2>)... (<var n> <init n> <update n>)) (<termination test> <returned result>) (<body>)) (defun count-elements (liste) (do ((len 0 (+ len 1)) (l liste (cdr l))) ((null l) len))) En enkel do-løkke - uten kropp (<body>)!! Høyere ordens Lisp-funksjoner Tar andre Lisp-funksjoner som argument Eksempel 1 ;;; Generell filter-funksjon [ikke standard Lisp funksjon] (defun filter (liste test-funksjon) (cond ((null liste) nil) ((funcall test-funksjon (car liste)) (cons (car liste) (filter (cdr liste) test-funksjon))) (t (filter (cdr liste) test-funksjon)))) Eksempel 2 Mapping-funksjonen mapcar Iterativ funksjon for repeterende anvendelse av en funksjon på hvert element i en liste. > (mapcar #'count-atoms '((a b) (c (((d) e)) f ((g))) h)) (251) (defun square-root-elements (liste) (mapcar #'sqrt liste)) > (square-root-elements '( )) ( )

Heuristisk søking (kap. 4) Emner: Kunstig intelligens (MNFIT-272) Forelesning 4

Heuristisk søking (kap. 4) Emner: Kunstig intelligens (MNFIT-272) Forelesning 4 Kunstig intelligens (MNFIT-272) Forelesning 4 Emner: Problemløsning som søking (forts.) - Heuristisk søk, generelt - Søking i spill AI språk - Generelt -Prolog -Lisp Heuristisk søking (kap. 4) Kunnskap

Detaljer

MNFIT-272 Kunstig intelligens Forelesning 4.

MNFIT-272 Kunstig intelligens Forelesning 4. MNFIT-272 Kunstig intelligens Forelesning 4. Emner: Søkesystemer - styring og kontroll av søk - søkesystemer i praksis Produksjonssystemer - regelbasert søking - som generell problemløsningsmodell - praktiske

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

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

Heuristisk søking (kap. 4) Emner: Kunstig intelligens (MNFIT-272) Forelesning 4

Heuristisk søking (kap. 4) Emner: Kunstig intelligens (MNFIT-272) Forelesning 4 Kunstig intelligens (MNFIT-272) Forelesning 4 Emner: Problemløsning som søking (forts.) -Heuristisk søk, generelt -Søking i spill Søkekontroll -Produksjonssystem -Blackboard system Heuristisk søking (kap.

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

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

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

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

Lisp 2: Lister og funksjoner

Lisp 2: Lister og funksjoner Eirik Alderslyst Nygaard Øystein Ingmar Skartsæterhagen Programvareverkstedet 11. mars 2010 (Lister) (Par) (Listeoperasjoner) (Assosiasjonslister)... lists are the heart of Lisp... Guy L. Steele Jr. (Par)

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

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

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 Stephan Oepen Universitetet i Oslo 9. februar 2015 Tema 2 Forrige uke Lister og listerekursjon quote Høyereordens

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

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

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

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

Lisp 5: Makroer. Programvareverkstedet. 29. april 2010

Lisp 5: Makroer. Programvareverkstedet. 29. april 2010 Eirik Alderslyst Nygaard Øystein Ingmar Skartsæterhagen Programvareverkstedet 29. april 2010 (Introduksjon: Litt om evaluering) (Funksjonskall: Alle argumentformene evalueres først, så kalles funksjonen

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

Gjennomgåelse av eksamensoppgaven i HUMIT2710 fra våren 2004

Gjennomgå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

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

INF3140 Modeller for parallellitet INF3140/4140: Programanalyse

INF3140 Modeller for parallellitet INF3140/4140: Programanalyse INF3140/4140: Programanalyse Uke 4, side 1. Hvordan sjekke egenskaper ved programmer? Testing eller debugging øker tilliten til programmet ved prøving, men gir ingen garanti for korrekthet Operasjonell

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

(define (naer-nok-kuberot? y x) (< (abs (- (kube y) x)) 0.001)) (define (naermere-kuberot y x) (/ (+ (* y 2) (/ x (kvadrat y))) 3))

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

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

Sideeekter og makroer i Lisp

Sideeekter og makroer i Lisp Sideeekter og makroer i Lisp PVV-kurs 18. mars 2010 Oversikt over kurset (Del 4: Imperativ programmering (utsatt fra forrige kurs)) (Del 5: Makroer) (Del 6: Eksempel: Postmodern) Eirik Alderslyst Nygaard

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

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

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

Vi skal se på lambda-uttrykk. Følgende er definerte og vil bli brukt gjennom oppgaven

Vi skal se på lambda-uttrykk. Følgende er definerte og vil bli brukt gjennom oppgaven SLI 230 - side 2 av 8 EKSAMENSOPPGAVE - SLI 230 - VÅR 2000 Nedenfor følger eksamensoppgaver i SLI 230. Først om oppgavene Bakerst følger to sider med hjelp slik det er avtalt - liste over primitiver fra

Detaljer

Vi skal se på grafalgoritmer for:

Vi skal se på grafalgoritmer for: Grafalgoritmer Vi skal se på grafalgoritmer for: Traversering: Oppsøk alle nodene i grafen en og bare en gang, på en eller annen systematisk måte Nåbarhet: Finnes det en vei fra en node til en annen node?

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

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

PG4200 Algoritmer og datastrukturer Forelesning 7

PG4200 Algoritmer og datastrukturer Forelesning 7 PG4200 Algoritmer og datastrukturer Forelesning 7 Lars Sydnes, NITH 19. mars 2014 I. TERMINOLOGI FOR TRÆR TRÆR Lister: Lineære Trær: Hierarkiske Modell / Språk: Bestanddeler: Noder, forbindelser. Forbindelse

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

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

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer INF2220 - Algoritmer og datastrukturer HØSTEN 2016 Institutt for informatikk, Universitetet i Oslo Forelesning 6: Grafer II Ingrid Chieh Yu (Ifi, UiO) INF2220 28.09.2016 1 / 30 Dagens plan: Dijkstra fort.

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

GRAFER. Korteste vei i en vektet graf uten negative kanter. Korteste vei, en-til-alle, for: Minimale spenntrær

GRAFER. Korteste vei i en vektet graf uten negative kanter. Korteste vei, en-til-alle, for: Minimale spenntrær IN Algoritmer og datastrukturer GRAER IN Algoritmer og datastrukturer Dagens plan: orteste vei, en-til-alle, for: ektet rettet graf uten negative kanter (apittel 9..) (Dijkstras algoritme) ektet rettet

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

Vi skal se på grafalgoritmer for:

Vi skal se på grafalgoritmer for: Grafalgoritmer Vi skal se på grafalgoritmer for: raversering: Nåbarhet: Oppsøk alle nodene i grafen en og bare en gang, på en eller annen systematisk måte innes det en vei fra en node til en annen node?

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

TDT4165 PROGRAMMING LANGUAGES. Exercise 02 Togvogn-skifting

TDT4165 PROGRAMMING LANGUAGES. Exercise 02 Togvogn-skifting TDT4165 PROGRAMMING LANGUAGES Fall 2012 Exercise 02 Togvogn-skifting Problembeskrivelse Du er sjef for å skifte vognene til et tog. Vi antar at hver vogn selv har en motor og at toget ikke har noe lokomotiv.

Detaljer

Eksamen i SLI 5 høsten 1993

Eksamen i SLI 5 høsten 1993 1 Eksamen i SLI 5 høsten 1993 Tid: Mandag 29.november 1993 kl. 9-15 (6 timer). Det er ikke tillatt med trykte eller skrevne hjelpemidler. Som siste ark i dette eksamenssettet er det lagt ved en liste over

Detaljer

Stack. En enkel, lineær datastruktur

Stack. En enkel, lineær datastruktur Stack En enkel, lineær datastruktur Hva er en stack? En datastruktur der vi til enhver tid kun har tilgang til elementet som ble lagt inn sist Et nytt element legges alltid på toppen av stakken Skal vi

Detaljer

Alg. Dat. Øvingsforelesning 3. Grafer, BFS, DFS og hashing. Børge Rødsjø rodsjo@stud.ntnu.no

Alg. Dat. Øvingsforelesning 3. Grafer, BFS, DFS og hashing. Børge Rødsjø rodsjo@stud.ntnu.no Alg. Dat Øvingsforelesning 3 Grafer, BFS, DFS og hashing Børge Rødsjø rodsjo@stud.ntnu.no Dagens tema Grafer Terminologi Representasjon av grafer Bredde først søk (BFS) Dybde først søk (DFS) Hashing Hashfunksjoner,

Detaljer

Par og Lister (først et par sider fra forrige uke) Par er byggestener for lister og trær og sammensatte datatyper.

Par og Lister (først et par sider fra forrige uke) Par er byggestener for lister og trær og sammensatte datatyper. Par 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

Detaljer

MAT1030 Diskret Matematikk

MAT1030 Diskret Matematikk MAT1030 Diskret Matematikk Forelesning 29: Kompleksitetsteori Roger Antonsen Institutt for informatikk, Universitetet i Oslo 13. mai 2009 (Sist oppdatert: 2009-05-17 22:38) Forelesning 29: Kompleksitetsteori

Detaljer

Forelesning 29: Kompleksitetsteori

Forelesning 29: Kompleksitetsteori MAT1030 Diskret Matematikk Forelesning 29: Kompleksitetsteori Roger Antonsen Institutt for informatikk, Universitetet i Oslo Forelesning 29: Kompleksitetsteori 13. mai 2009 (Sist oppdatert: 2009-05-17

Detaljer

Rekursjon. Binærsøk. Hanois tårn.

Rekursjon. Binærsøk. Hanois tårn. Rekursjon Binærsøk. Hanois tårn. Hvorfor sortering (og søking) er viktig i programmering «orden» i dataene vi blir fort lei av å lete poleksempel internett «alt» er søking og sortering alternativer til

Detaljer

Binære trær: Noen algoritmer og anvendelser

Binære trær: Noen algoritmer og anvendelser Binære trær: Noen algoritmer og anvendelser Algoritmer / anvendelser: Søking i usortert binært tre Telling av antall noder og nivåer i treet Traversering av binære trær Binære uttrykkstrær Kunstig intelligens(?):

Detaljer

Notat 2, ST Sammensatte uttrykk. 27. januar 2006

Notat 2, ST Sammensatte uttrykk. 27. januar 2006 Notat 2, ST1301 27. januar 2006 1 Sammensatte uttrykk Vi har sett at funksjoner ikke trenger å bestå av annet enn ett enkeltuttrykk som angir hva funksjonen skal returnere uttrykkt ved de variable funksjonen

Detaljer

Dagens tema: Regulære språk og uttrykk

Dagens tema: Regulære språk og uttrykk IN 2 Programmeringsspråk Dagens tema: Regulære språk og uttrykk Ulike typer språk (Kompendium 47: 23) Hvorfor er regulære uttrykk så interessante? Ulike representasjoner av regulære språk (Kompendium 47:

Detaljer

AlgDat 12. Forelesning 2. Gunnar Misund

AlgDat 12. Forelesning 2. Gunnar Misund AlgDat 12 Forelesning 2 Forrige forelesning Følg med på hiof.no/algdat, ikke minst beskjedsida! Algdat: Fundamentalt, klassisk, morsomt,...krevende :) Pensum: Forelesningene, oppgavene (pluss deler av

Detaljer

INF2220: 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 ) 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)

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

Korteste vei i en vektet graf uten negative kanter

Korteste vei i en vektet graf uten negative kanter Dagens plan: IN - Algoritmer og datastrukturer HØSTEN 7 Institutt for informatikk, Universitetet i Oslo IN, forelesning 7: Grafer II Korteste vei, en-til-alle, for: Vektet rettet graf uten negative kanter

Detaljer

Kapittel 1 En oversikt over C-språket

Kapittel 1 En oversikt over C-språket Kapittel 1 En oversikt over C-språket RR 2015 1 Skal se på hvordan man En innføring i C Skriver data til skjermen Lese data fra tastaturet Benytter de grunnleggende datatypene Foretar enkle matematiske

Detaljer

Definisjon av binært søketre

Definisjon av binært søketre Binære søketrær Definisjon av binært søketre For alle nodene i et binært søketre gjelder: Alle verdiene i nodens venstre subtre er mindre enn verdien i noden Alle verdiene i nodens høyre subtre er større

Detaljer

Forelesning 14. Rekursjon og induksjon. Dag Normann februar Oppsummering. Oppsummering. Beregnbare funksjoner

Forelesning 14. Rekursjon og induksjon. Dag Normann februar Oppsummering. Oppsummering. Beregnbare funksjoner Forelesning 14 og induksjon Dag Normann - 27. februar 2008 Oppsummering Mandag repeterte vi en del om relasjoner, da spesielt om ekvivalensrelasjoner og partielle ordninger. Vi snakket videre om funksjoner.

Detaljer

Algoritmeanalyse. (og litt om datastrukturer)

Algoritmeanalyse. (og litt om datastrukturer) Algoritmeanalyse (og litt om datastrukturer) Datastrukturer definisjon En datastruktur er den måten en samling data er organisert på. Datastrukturen kan være ordnet (sortert på en eller annen måte) eller

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

MAT1030 Diskret matematikk

MAT1030 Diskret matematikk MAT1030 Diskret matematikk Forelesning 14: Rekursjon og induksjon Dag Normann Matematisk Institutt, Universitetet i Oslo 27. februar 2008 Oppsummering Mandag repeterte vi en del om relasjoner, da spesielt

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO Eksamen i UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamensdag: 13. desember 2011 Tid for eksamen: 14.30 18.30 Oppgavesettet er på 7 sider. Vedlegg: INF2220 lgoritmer og datastrukturer

Detaljer

Kodegenerering, del 2: Resten av Kap. 8 pluss tilleggsnotat (fra kap. 9 i ASU ) INF5110 V2007

Kodegenerering, del 2: Resten av Kap. 8 pluss tilleggsnotat (fra kap. 9 i ASU ) INF5110 V2007 Kodegenerering, del 2: Resten av Kap. 8 pluss tilleggsnotat (fra kap. 9 i ASU ) INF5110 V2007 Stein Krogdahl, Ifi UiO NB: Innfører noen begreper som først og fremst har mening om man skal gå videre med

Detaljer

Notat 2, ST januar 2005

Notat 2, ST januar 2005 Notat 2, ST1301 25. januar 2005 1 Sammensatte uttrykk Vi har sett at funksjoner ikke trenger å bestå av annet enn ett enkeltuttrykk som angir hva funksjonen skal returnere uttrykkt ved de variable funksjonen

Detaljer

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays

Oversikt. Introduksjon Kildekode Kompilering Hello world Hello world med argumenter. 1 C programmering. 2 Funksjoner. 3 Datatyper. 4 Pekere og arrays Oversikt C programmering 1 C programmering Introduksjon Kildekode Kompilering Hello world Hello world med argumenter 2 Funksjoner 3 Datatyper 4 Pekere og arrays 5 Kontrollstrukturer Lars Vidar Magnusson

Detaljer