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

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

Plan: Typer (Ghezzi&Jazayeri kap.3 frem til 3.3.1) Funksjonelle språk. Innføring i ML. typer enkle funksjoner (Fortsetter med ML i to uker til)

Plan: Funksjonelle språk (Ghezzi&Jazayeri kap.7 frem til 7.4) IN 211 Programmeringsspråk

Plan: Parameter-overføring Alias Typer (Ghezzi&Jazayeri kap.3 frem til 3.3.1) IN 211 Programmeringsspråk

Dagens tema. Funksjonelle språk Fortsetter med ML: Typer Unntak Introduksjon til høyere-ordens funksjoner. ML avsluttes etter planen neste uke.

INF3110 Programmeringsspråk. Dagens tema

1-0::[1,2]; 2 - [3,4]; 3 - [1,2] :: [3,4]; 4-1 :: 2 :: 3 :: nil; 5 - "INF" ^ "3110" ^ " er moro"; 6 - rev [1,2,3];

Dagens tema Innføring i ML - del IV

Fortsetter med ML: Repetisjon av lister Typer Unntak Moduler og abstrakte datatyper Introduksjon til høyere-ordens funksjoner

1/28. Forelesning Forelesning / fun f (_,0) = true. 2 f(0,_)=true. 3 f_ =false; 4 val f = fn : int * int -> bool

ML (kap 5) INF3110/4110. Bakgrunn Litt historikk. Funksjonelle språk (kap 4.4) Bakgrunnen for ML. Programmeringsspråket ML Hvordan kjøre ML-programmer

Variable Man kan bruke variable i ML. ML (kap 5 og 6) Nye datatyper INF3110/4110 INF3110/4110 INF3110/4110 INF3110/4110. Variable i ML.

Funksjoner: Kun faste funksjoner. Ikke rekursive kall. Funksjonelle språk (kap 4.4) Bakgrunnen for ML

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

INF3110 Programmeringsspråk. Velkommen til kurset INF 3110/4110. Programmeringsspråk 1/24

INF 3110/4110. Velkommen til kurset. Programmeringsspråk. Først det praktiske

Dagens tema. Innføring i ML - del III (Kapittel & ML-kompendiet.) Unntak Abstrakte datatyper i ML Høyere-ordens funksjoner

Kap 6.4: Typesjekking Foiler ved Birger Møller-Pedersen Forelest av Stein Krogdahl 19. og 23. mars Dagens tema: Typer og typesjekking

Plan. Fortsetter med ML: lister og rekursive typer/funksjoner unntak let-uttrykk moduler og abstrakte datatyper høyere-ordens funksjoner

INF2810: Funksjonell Programmering

INF2810: Funksjonell Programmering

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

Semantisk Analyse del III

INF2810: Funksjonell Programmering

UNIVERSITETET I OSLO

INF2810: Funksjonell Programmering

INF Repetisjon: Hvordan bygge treet og analysere? 8. september Typisk situasjon. De problematiske syntaks-diagrammene

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

Datatyper og typesjekking

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

Programmeringsspråket C

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

INF2810: Funksjonell Programmering. Dataabstraksjon og Trerekursjon

UNIVERSITETET I OSLO

Forelesere. Velkommen til programmeringsspråkenes verden IN211. Praktiske opplysninger. Faglige forutsetninger. Ragnhild Kobro Runde

Datatyper og typesjekking

Datatyper og typesjekking

Haskell. Kjetil Ørbekk. Programvareverkstedet, 19. mars 2009

TDT Øvingsforelesning 1. Tuesday, August 28, 12

Velkommen til INF2100 Jeg er Dag Langmyhr

EKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00

ML (kap 5 og 6) INF3110/4110. Variable i ML. Nye datatyper. Currying. Avanserte listeoperatorer. Typeanalyse

AlgDat 12. Forelesning 2. Gunnar Misund

Plan. Fortsetter med ML: lister og rekursive typer/funksjoner unntak let-uttrykk moduler og abstrakte datatyper høyere-ordens funksjoner

Datatyper og typesjekking

Beskrivelse av programmeringsspråket Compila15 INF Kompilatorteknikk Våren 2015

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

INF2220: Forelesning 1. Praktisk informasjon Analyse av algoritmer (kapittel 2) (Binær)trær (kapittel )

Introduksjon til objektorientert programmering

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

UNIVERSITETET I OSLO

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

MAT1030 Plenumsregning 1

IN 211 programmeringsspråk H 99

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

Rekursiv programmering

INF 1000 høsten 2011 Uke september

INF1000 undervisningen INF 1000 høsten 2011 Uke september

TDT4165 PROGRAMMING LANGUAGES. Exercise 01 Introduksjon til Oz

MAT1030 Diskret Matematikk

Dagens tema: Sjekking

Java-kurs. Andreas Knudsen Nils Grimsmo 9th October 2003

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

Kapittel 1 En oversikt over C-språket

Del 1 En oversikt over C-programmering

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

Løsningsforslag til eksamen i IN 211 høsten 2002

MED SVARFORSLAG UNIVERSITETET I OSLO. Det matematisk-naturvitenskapelige fakultet

Hva er en algoritme? INF HØSTEN 2006 INF1020. Kursansvarlige Ragnar Normann E-post: Dagens tema

MED SVARFORSLAG UNIVERSITETET I OSLO

Python: Rekursjon (og programmering av algoritmer) Python-bok: Kapittel 12 + teoribok om Algoritmer

Bakgrunnen for INF2100. Velkommen til INF2100. Prosjektet. Hva gjør en kompilator?

INF2810: Funksjonell Programmering. En Scheme-evaluator i Scheme

INF2810: Funksjonell Programmering. Trær og mengder

UNIVERSITETET I OSLO

Del 3: Evaluere uttrykk

Oppgavesettet består av 7 sider, inkludert denne forsiden. Kontroll& at oppgaven er komplett før du begynner å besvare spørsmålene.

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

Velkommen til INF2100

Semantisk Analyse del I

AlgDat 10. Forelesning 2. Gunnar Misund

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

Plenumsregning 1. MAT1030 Diskret Matematikk. Repetisjon: Algoritmer og pseudokode. Velkommen til plenumsregning for MAT1030

Repetisjon: Statiske språk uten rekursive metoder (C1 og C2) Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

Uke 8 Eksamenseksempler + Ilan Villanger om studiestrategier. 11. okt Siri Moe Jensen Inst. for informatikk, UiO

løsningsforslag-uke5.txt

Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

TDT4105 Informasjonsteknologi, grunnkurs. Introduksjon til programmering i Matlab

Anatomien til en kompilator - I

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

UNIVERSITETET I OSLO

INF2810: Funksjonell Programmering. Oppsummering og eksamensforberedelser

INF2810: Funksjonell Programmering. Oppsummering og eksamensforberedelser

INF2810: Funksjonell Programmering. Eksamensforberedelser

INF2810: Funksjonell Programmering. Oppsummering og eksamensforberedelser

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF2810: Funksjonell Programmering. Oppsummering og eksamensforberedelser

MAT1030 Diskret matematikk

Transkript:

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: 1 Type: boolean 2 Verdimengde: {true, false} 3 Operatorer: NOT, AND, OR Programmeringsspråk har vanligvis en del predefinerte typer, samt mekanismer for å lage mer komplekse datatyper fra disse 1/19 Forelesning 2 2782003 Forelesning 2 2782003 2/19 Hva er fint med typer? Det gir oss muligheten til å klassifisere våre data beskytte data fra feil eller meningsløs bruk abstrahere og gjemme den underliggende representasjonen Predefinerte typemekanismer elementære typer, ofteinteger, real, character, string, oppramstyper, eks {mandag, tirsdag, onsdag, } intervall-typer, feks tallene fra 1 til 100 lister, sekvenser, predefinert i LISP, ML tabeller, arrayer, gjerne predefinert i imperative språk pekere Forelesning 2 2782003 3/19 Forelesning 2 2782003 4/19

Generelle typemekanismer I produkt-typer med flere komponenter Pascal/Ada: record C/C++: strukturer Java/Simula: klasser union-typer gir flere alternativer (gjensidig ekskluderende) Eksempel (i ML-syntaks): datatype boolean = true false; Pascal/Ada: variant record C/C++: union Generelle typemekanismer II rekursive typer inneholder noe av sin egen type Eksempel: liste av heltall 1 class Node { int verdi; Node neste; } 2 Node liste; Med rekursjon kan man lage strukturer som er vilkårlig store og som kan ha vilkårlig stor kompleksitet parametriserte typer muliggjør datastrukturer over vilkårlige element -typer Eksempel: en generell liste Ved de generelle mekanismene kan man uttrykke de fleste andre type-konstruksjoner implisitt (med vekslende effektivitet) Forelesning 2 2782003 5/19 Forelesning 2 2782003 6/19 Abstrakte datatyper Innkapsling: Kan definere verdimengden og de tilhørende funksjonene i én modul Beskyttelse/skjuling: Skjule visse funksjoner og variable i en modul slik at de ikke kan brukes utenfor modulen Abstraksjon - vi slipper å tenke på den underliggende representasjonen Eksempel: Rasjonale tall som data-type: 1 Type RAT = 2 modulebegin 3 t, n : Int 4 FUNC mult(a,b:rat):rat == 5 RETURN((at*bt),(an*bn)) 6 7 endmodule RAT Verdimengde / datastruktur Tilhørende funksjoner Eventuelt andre funksjoner Funksjonelle (applikative) språk Motivasjon: Matematisk tilnærming til problemene uten tanke på maskinens oppbygning Abstraksjonsnivå tilpasset programmereren, ikke hardware Eksempel: Euclids algoritme for å finne største felles divisor Algoritmen: gcd(0, n) = n gcd(m, n) = gcd(n mod m, m) for m > 0 1 // Java 2 int gcd(int m, int n){ 3 int prev; 4 while (m!= 0) { prev = m; m = n % m; n = prev;} 5 return n;} (* ML *) fungcd(m,n)= ifm=0thenn else gcd(n mod m, m); Forelesning 2 2782003 7/19 Forelesning 2 2782003 8/19

har ikke tilordning! Variable kan ikke oppdateres Kan definere: konstanter, funksjoner, typer (hvis typet språk) og kan skrive uttrykk! Vi har ikke tilstander som i imperative språk, men verdier og applikasjon av funksjoner Typiske fordeler enkel, elegant kode ingen side-effekter aliasing ikke problem kan lett interpreteres Typiske ulemper effektivitet mister kontroll med tid og rom input/output (ML gjør dette imperativt) Forelesning 2 2782003 9/19 Forelesning 2 2782003 10/19 imperativt applikativt oppdatering tilordning parameter-mekanismen sekv sammensetning ; funksjons-sammensetning valg if-setning if-uttrykk gjentakelse løkke rekursjon Eksempel: den imperative koden x := f (x, y); x := g(x, y); blir funksjonelt seende ut som: g( f (x, y), y) Introduksjon til standard ML Pensum: - Bjørn Kristoffersen: Funksjonell Programmering i Standard ML, kompendium 61 - Læreboka, kapittel 7 (untatt 741, 742 og 75) Standard ML er et interpreterende språk Ml-interpreteren startes fra Unix ved kommandoen sml: 1 > sml 2 Standard ML of New Jersey, Version 11003, 3 January 30, 1998 [CM; autoload enabled] 4 - Forelesning 2 2782003 11/19 Forelesning 2 2782003 12/19

- angir at systemet er klart til å ta imot kommandoer = angir at systemet venter på flere instruksjoner Husk: Alle uttrykk og deklarasjoner skal avsluttes med ; Kommentarer skrives ved (* *) CTRL-D avslutter systemet Man kan også starte ML fra emacs (sml-mode) Eksempler på enkle beregninger 1-2+2; 2 valit=4:int -5div2; valit=2:int Deklarasjon av funksjoner fun f(<parameterliste>) = <uttrykk>; - fun plussto(x : int) = x + 2; val plussto = fn : int -> int - plussto(5); - plussto 1; valit=3:int - plussto(plussto it); - 50 / 20; val it = 25 : real -8mod3; valit=2:int -it+5; Forelesning 2 2782003 13/19 Forelesning 2 2782003 14/19 Deklarasjon av konstanter - val konstanten = 5; val konstanten = 5 : int - konstanten + 3; valit=8:int Predefinerte typer: int med = < * + - div mod 0, 1, 2, ( ~ unær minus) real med = < * + - / 256 bool med = true false andalso orelse string med = < "Olav Olavsen" ^ (konkatenering) list med = :: @ (konkatenering) [] [1,2,3] list Merk: list er ikke en type, men en typekonstruktør Ingen overlasting Ny deklarasjon med samme navn medfører at siste deklarasjon gjelder! Eksempel: fun f() = ; fun f() = ; nå vil f binde til siste deklarasjon! Forelesning 2 2782003 15/19 Forelesning 2 2782003 16/19

Pass på skopet! 1 -vala=5; 2 vala=5:int 3 - fun plussa x = x + a; 4 val plussa = fn : int -> int 5 - plussa 2; 6 7 - plussa 3; 8 valit=8:int 9 - val a = 100; 10 valit=false:bool 11 - plussa 2; 12 Funksjonen plussa bruker en omgivelse der a har verdien 5 Vi har statisk binding Lister Eksempler med lister: [1,2,3] listen av 1, 2 og 3 [] den tomme listen (skrives også nil) [1,2]@[3,4]=[1,2,3,4] konkatenering 0::[1,2] = [0,1,2] innsetting først ["Ole", "Petter"] liste av strenger [[1,2],[2,3,4]] liste av lister Typisk mønster for rekursive funksjoner over lister: 1 - fun f (lst: <type> list) = 2 case lst of [] => 3 x::xs => f(xs) ; Forelesning 2 2782003 17/19 Forelesning 2 2782003 18/19 To eksempler på rekursive funksjoner over lister: 1 - fun finn(x:int,ls:int list) = 2 case ls of [] => false 3 y::resten=>x=y 4 orelse finn(x,resten); 5 val finn = fn : int * int list -> bool 6 - finn(4, [2,4,6]); 7 valit=true:bool 8 - fun fjern(x:int,ls:int list) = 9 case ls of [] => [] 10 y::resten=>ifx=y 11 then fjern(x,resten) 12 else y :: fjern(x,resten); 13 val fjern = fn : int * int list -> int list 14 - fjern(1,[1,3,4,1,3]); 15 val it = [3,4,3] : int list Forelesning 2 2782003 19/19