Sista delen av kursen

Relevanta dokument
Programspråkslingvistik. Sista delen av kursen. Ett programspråk

Sista delen av kursen

Deklarationer/definitioner/specifikationer

Välkomna till NADA. Paradigm i datalogin. Vad är ett paradigm

Typsystem. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 19

Abstraktion. procedurabstraktion. DA2001 (Föreläsning 26) Datalogi 1 Hösten / 27

Abstraktion. Abstraktion... Abstraktion... Abstraktion...

Typsystem. Typsystem... Typsystem... Typsystem... 2 *

Pascal. reserverade ord fördefinierade funktioner och procedurer egendefinierade funktioner, procedurer och objekt

Pascal... Pascal. Pascal... Pascal...

Polymorfi (många skepnader) är egentligen en mängd olika abstraktionsmekanismer och en indelning skulle kunna se ut så här: polymorfi

Funktionell programmering DD1361

Introduktion till formella metoder Programmeringsmetodik 1. Inledning

Omgivningar. Omgivningar är viktiga eftersom de avgör vilka namn som är synliga och därmed dessas innebörd och de värden som är förknippade med dem.

DD1361 Programmeringsparadigm. Carina Edlund

Datalogi, grundkurs 1. Lösningsförslag till tentamen

Sökning och sortering

Repetition i Pascal. Exemplen fac. Exemplen fac i Pascal. Exemplen fac motivering. Orginalet

Datalogi, grundkurs 1. Lösningsförslag till tentamen

Föreläsningsanteckningar, Introduktion till datavetenskap HT S4 Datastrukturer. Tobias Wrigstad

KOMPLETTERANDE HEMTENTAMEN TDDB53

Sökning och sortering. Sökning och sortering - definitioner. Sökning i oordnad lista. Sökning med vaktpost i oordnad lista

Dagens föreläsning Programmering i Lisp Fö 7. Sammanfattning funktionell programmering Exempel på funktionella programspråk

Imperativ programmering. Föreläsning 2

Föreläsning 3: Booleans, if, switch

Imperativ programmering

TENTAMEN TDDB53. Programmering i Ada för MI (provkod TEN2) den 7 april 2010 kl Institutionen för datavetenskap, IDA Olle Willén mars 2010

Föreläsning 9 Exempel

Föreläsning 9 Exempel. Intervallhalveringsmetoden. Intervallhalveringsmetoden... Intervallhalveringsmetoden...

Datatyper och kontrollstrukturer. Skansholm: Kapitel 2) De åtta primitiva typerna. Typ Innehåll Defaultvärde Storlek

Exempel på typer av datorspråk EXCEL

Idag: Par och listor. Symboler. Symboler används för att uttrycka icke-numeriska data såsom namn, adress, bilregisternummer, boktitel, osv.

n Detta för att kunna koncentrera oss på n Tal: number? n Symboler: symbol? n Strängar: string? n Tecken: char? n Boolskt: boolean?

TDP002 - Imperativ programmering

ITK:P1 Föreläsning 1. Programmering. Programmeringsspråket Java. Stark typning Explicit typning Strukturerat Hög säkerhet

Digitalitet. Kontinuerlig. Direkt proportionerlig mot källan. Ex. sprittermometer. Elektrisk signal som representerar ljud.

Idag: Par och listor. Scheme. DA2001 (Föreläsning 6) Datalogi 1 Hösten / 29

Tentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34

TDP002 Imperativ programmering

TDP002 - Imperativ programmering

Dagens föreläsning Programmering i Lisp Fö 5

TDDC74 Programmering, abstraktion och modellering DUGGA 2

Några saker till och lite om snabbare sortering

TDDC30. Kursledning Kursledare: Jonas Lindgren. Labassistent: Jonas Lindgren Labassistent: Niklas Holma Labassistent: Erik Nilsson

Imperativ programmering. Imperativ programmering konstruktioner i Lisp. Datastrukturer (kap ) arraystruktur poststruktur

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Tentamen Grundläggande programmering

TDDC74 Lab 04 Muterbara strukturer, omgivningar

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson 2

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014

Grundläggande Datalogi

GOTO och lägen. Några saker till och lite om snabbare sortering. GOTO och lägen (3) GOTO och lägen (2)

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering, abstraktion och modellering. Tentamen

Föreläsning 6: Introduktion av listor

Kompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering

Imperativ programmering. Föreläsning 3

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

BER AKNINGSBARHET F OR DATALOGER. Kent Petersson. Institutionen for Datavetenskap Goteborgs Universitet / Chalmers Goteborg, Sweden

Imperativ programmering. Föreläsning 4

TDDC74 Programmering, abstraktion och modellering DUGGA 2

Exempel på ett litet Ada-program

GRUNDER I VHDL. Innehåll. Komponentmodell Kodmodell Entity Architecture Identifierare och objekt Operationer för jämförelse

Preliminär elmarknadsstatistik per månad för Sverige 2014

Del : Funktionell programmering. I alla deluppgifterna, använd Haskell och skriv typen för de identifierare du definierar.

Två fall: q Tom sekvens: () q Sekvens av element: (a b c) ; (sum-rec '(2 4 6)) = 12. q Första elementet uppfyller vissa villkor: (2 a b c)

Program & programmering

Tentamen i. TDDA 69 Data och programstrukturer

TENTAMEN I PROGRAMSPRÅK -- DVG C kl. 08:15-13:15

Pythons standardbibliotek

String [] argv. Dagens Agenda. Mer om arrayer. Mer om arrayer forts. String [] argv. argv är variabelnamnet. Arrayer och Strängar fortsättning

TDDC74 Programmering: Abstraktion och modellering Dugga 2, Tid: kl 08-10, Datum:

Programmera i C Varför programmera i C när det finns språk som Simula och Pascal??

Signalflödesmodellen. Två (gamla) exempel: Kvadratera alla jämna löv.

Klassdeklaration. Metoddeklaration. Parameteröverföring

Repetition i Python 3. Exemplen fac. Exemplen fac motivering. Exemplen fac i Python

Programmering A. Johan Eliasson

Övning2. Variabler. Data typer

TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel

TDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 1 Jonas Lindgren, Institutionen för Datavetenskap, LiU

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

Dataabstraktion. TDDD73 Funktionell och impterativ programmering i Python Föreläsning 12. Peter Dalenius Institutionen för datavetenskap

TDDC74 Programmering, abstraktion och modellering DUGGA 3

Språket Scheme. DAT 060: Introduktion till (funktions)programmering. DrScheme. uttryck. Jacek Malec m. fl. evaluering av uttryck.

TDDC74 Programmering, abstraktion och modellering. Tentamen

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

Sökning i ordnad lista. Sökning och sortering. Sökning med vaktpost i oordnad lista

Översikt Introduktion DST 1. Nicholas Wickström. IDE, Högskolan i Halmstad. N. Wickström

(Man brukar säga att) Java är... Denna föreläsning. Kompilering av Java. Historik: Java. enkelt. baserat på C/C++ Allmänt om Java

Datalogi, grundkurs 1

Introduktion till objektorientering. Vad är objektorientering egentligen? Hur relaterar det till datatyper? Hur relaterar det till verkligheten?

Datastrukturer. Erik Forslin. Rum 1445, plan 4 på Nada

Dagens föreläsning Programmering i Lisp. - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning

Dagens föreläsning. Modeller för programmeringsspråk. - Olika modeller programspråk Interpretator - kompilator. - Syntax - semantik.

10. Mängder och språk

Objektorienterad Programmering (TDDC77)

Transkript:

Sista delen av kursen handlar om hur program, delprogram och datatyper deklareras och vad det man åstadkommit egentligen betyder. Innehåll Syntaktisk (hur ser det ut) och semantisk (vad betyder det) beskrivning Paradigm (syn- och tankesätt och dess konsekvenser) Namn, variabler, värden, typer Bindningar och omgivningar Funktion- och procedurabstraktion Inkapsling Typsystem - monomorfism, något om polymorfism, subtypning, typkonvertering Villkorlig bearbetning - något om hopp och undantagshantering DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 1 / 29

Programspråkslingvistik Skiljer sig från lingvistik för naturliga(?) språk genom Enklare grammatik (kontextfri) Begränsat antal språkelement Entydig tolkning av satser Mindre redundans Mindre uttrycksfulla Båda har syntax (vilka satser är möjliga) och semantik (vad betyder en sats). Syntaxen beskrivs med syntaxdiagram eller BNF (EBNF). Semantiken kan beskrivas matematiskt, men beskrivs oftast ungefärligt med hjälp av exempel. DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 2 / 29

Ett programspråk Ett programspråk är en notation för abstrakt beskrivning av algoritmer i en viss paradigm. En paradigm är ett sätt att tänka och varje programspråk understödjer i allmänhet en paradigm (imperativ programmering, funktionell programmering, logikprogrammering, objektorienterad programmering). Varje programspråk är uppbyggt kring ett antal begrepp som dataabstraktion programabstraktion omgivning typning tillstånd rekursion iteration DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 3 / 29

De begrepp som ingår varierar från språk till språk, mest beroende på paradigm, men ett begrepp kan ingå i flera olika språk baserade på olika paradigm. Terminologin är hämtad från ett stort antal andra discipliner och begreppskollisioner uppstår mellan olika paradigm. DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 4 / 29

För att ett programspråk skall vara användbart måste det uppfylla några grundläggande krav. DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 5 / 29

För att ett programspråk skall vara användbart måste det uppfylla några grundläggande krav. Det skall vara universellt alla problem som kan lösas med hjälp av dator skall kunna lösas med språket DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 5 / 29

För att ett programspråk skall vara användbart måste det uppfylla några grundläggande krav. Det skall vara universellt alla problem som kan lösas med hjälp av dator skall kunna lösas med språket naturligt det skall vara rimligt begripligt DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 5 / 29

För att ett programspråk skall vara användbart måste det uppfylla några grundläggande krav. Det skall vara universellt alla problem som kan lösas med hjälp av dator skall kunna lösas med språket naturligt det skall vara rimligt begripligt implementerbart det skall gå att realisera språket på en dator så att enligt språket korrekta program kan exekveras DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 5 / 29

För att ett programspråk skall vara användbart måste det uppfylla några grundläggande krav. Det skall vara universellt alla problem som kan lösas med hjälp av dator skall kunna lösas med språket naturligt det skall vara rimligt begripligt implementerbart det skall gå att realisera språket på en dator så att enligt språket korrekta program kan exekveras effektivt det skall vara rimligt effektivt i förhållande till andra språk (??) DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 5 / 29

För att ett programspråk skall vara användbart måste det uppfylla några grundläggande krav. Det skall vara universellt alla problem som kan lösas med hjälp av dator skall kunna lösas med språket naturligt det skall vara rimligt begripligt implementerbart det skall gå att realisera språket på en dator så att enligt språket korrekta program kan exekveras effektivt det skall vara rimligt effektivt i förhållande till andra språk (??) konsekvent det skall inte understödja flera paradgim (en huvudparadigm, helst en enda) DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 5 / 29

Universalitet och implementerbarhet är inte svåra att uppnå. Naturlighet och konsekvens är sällan väl genomfört. Effektivitetsaspekten är tillfredsställd i olika avseenden (för olika typer av tillämpningar) i olika språk. DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 6 / 29

Assembler: start: move 1, reg1 move n, reg0 loop: jmpz exit mul reg0, reg1, reg1 decr reg0 jmp loop exit: stop DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 7 / 29

Assembler: start: move 1, reg1 move n, reg0 loop: jmpz exit mul reg0, reg1, reg1 decr reg0 jmp loop exit: stop Scheme: (define (fac n) (if (= n 0) 1 (* n (fac (- n 1))))) DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 7 / 29

ML: fun fac n = if n = 0 then 1 else n * fac (n - 1) DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 8 / 29

ML: fun fac n = if n = 0 then 1 else n * fac (n - 1) Pascal: FUNCTION fac(n: integer): integer; VAR i, res: integer; BEGIN res := 1; FOR i := 2 TO n DO res := res * i; fac := res; END; DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 8 / 29

Prolog: fac(0, 1). fac(n, N * X) :- N > 0, fac(n - 1, X). DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 9 / 29

Prolog: fac(0, 1). fac(n, N * X) :- N > 0, fac(n - 1, X). Syntax kommer inte vara föremål för diskussion, utan snarare utgångspunkt för diskussion om semantik. DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 9 / 29

Lite historia Fortran Algol60 Cobol Lisp Simula Algol68 PL/I Smalltalk Pascal C Prolog ML C++ Ada Scheme Miranda clpr Java Haskell DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 10 / 29

Värden och typer Datorprogram hanterar data och är i sig själva data. Värden och program representeras av data. Data är endast bitmönster och måste tolkas i enlighet med någon datatyp. DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 11 / 29

Värden och typer Datorprogram hanterar data och är i sig själva data. Värden och program representeras av data. Data är endast bitmönster och måste tolkas i enlighet med någon datatyp. Värden som är vanligt förekommande i program är primitiva (sanningsvärden, tecken, heltal, reella tal, strängar) sammansatta (poster, mängder, filer, par, listor) pekare (adress till... ) referenser (namn på... ) procedurer och funktioner (program) DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 11 / 29

Värden och typer... En datatyp är en mängd värden på vilka man opererar på ett uniformt sätt (en mängd värden och en mängd operatorer). Värden hanteras olika i olika språk. Scheme hanterar alla värden på samma sätt medan de flesta andra språk har olika grad av begränsningar i hanteringen. En typ (datatyp) är en mängd värden och en operationsmängd. DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 12 / 29

Värden och typer... En datatyp är en mängd värden på vilka man opererar på ett uniformt sätt (en mängd värden och en mängd operatorer). Värden hanteras olika i olika språk. Scheme hanterar alla värden på samma sätt medan de flesta andra språk har olika grad av begränsningar i hanteringen. En typ (datatyp) är en mängd värden och en operationsmängd. Ex (Pascal): typen Integer = {0, ±1,..., ±MaxInt}, med operationsmängden {+,,, DIV, MOD,ˆ}. typen Boolean = {TRUE, FALSE}, med operationsmängden {NOT, AND, OR, ANDALSO, ORELSE, =} Att a är av typen Integer skrivs a Integer. DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 12 / 29

Värden och typer... Alla programspråk har både primitiva och sammansatta typer. DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 13 / 29

Värden och typer... Alla programspråk har både primitiva och sammansatta typer. En typs värdemängd kallas typens domän. DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 13 / 29

Värden och typer... Alla programspråk har både primitiva och sammansatta typer. En typs värdemängd kallas typens domän. Ett värde är, i programspråkssammanhang, atomiskt om man inte behöver någon speciell struktur för att representera värdet. DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 13 / 29

Värden och typer... Alla programspråk har både primitiva och sammansatta typer. En typs värdemängd kallas typens domän. Ett värde är, i programspråkssammanhang, atomiskt om man inte behöver någon speciell struktur för att representera värdet. Atomiska typer kallas ofta primitiva. DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 13 / 29

Värden och typer... Alla programspråk har både primitiva och sammansatta typer. En typs värdemängd kallas typens domän. Ett värde är, i programspråkssammanhang, atomiskt om man inte behöver någon speciell struktur för att representera värdet. Atomiska typer kallas ofta primitiva. En typ kallas atomisk om alla värden i domänen är atomiska, t.ex: heltal, booleska värden,... DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 13 / 29

Värden och typer... Alla programspråk har både primitiva och sammansatta typer. En typs värdemängd kallas typens domän. Ett värde är, i programspråkssammanhang, atomiskt om man inte behöver någon speciell struktur för att representera värdet. Atomiska typer kallas ofta primitiva. En typ kallas atomisk om alla värden i domänen är atomiska, t.ex: heltal, booleska värden,... En typ som är primitiv i ett språk kan vara nödvändigt att representera som sammansatt i ett annat. DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 13 / 29

Värden och typer... Alla programspråk har både primitiva och sammansatta typer. En typs värdemängd kallas typens domän. Ett värde är, i programspråkssammanhang, atomiskt om man inte behöver någon speciell struktur för att representera värdet. Atomiska typer kallas ofta primitiva. En typ kallas atomisk om alla värden i domänen är atomiska, t.ex: heltal, booleska värden,... En typ som är primitiv i ett språk kan vara nödvändigt att representera som sammansatt i ett annat.därför måste en uppräkning vara språkberoende. DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 13 / 29

Värden och typer... En typ uppträder ofta under olika namn i olika språk. Typ Scheme Pascal ML Heltal integer Integer int Reella tal real Real real Teckensträng string string Sanningvärde boolean Boolean bool Delintervall a..b DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 14 / 29

Värden och typer... En typ uppträder ofta under olika namn i olika språk. Typ Scheme Pascal ML Heltal integer Integer int Reella tal real Real real Teckensträng string string Sanningvärde boolean Boolean bool Delintervall a..b Operationsmängderna är alltid fördefinierade. Man delar ofta in de primitiva typerna i kontinuerliga och diskreta (men de kontinuerliga måste representeras med en diskretisering). De primitiva typerna i Pascal är bl.a. Integer, Real, Char och Boolean. DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 14 / 29

Värden och typer... Sammansatta typer: DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 15 / 29

Värden och typer... Sammansatta typer: Kartesiska produkter. par, tripler,... av värden ur redan definierade typer (tupler). Ex: 3, abc Integer String DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 15 / 29

Värden och typer... Sammansatta typer: Kartesiska produkter. par, tripler,... av värden ur redan definierade typer (tupler). Ex: 3, abc Integer String Disjunkta unioner. Värden ur alternativa domäner. Ex: x Boolean String DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 15 / 29

Värden och typer... Sammansatta typer: Kartesiska produkter. par, tripler,... av värden ur redan definierade typer (tupler). Ex: 3, abc Integer String Disjunkta unioner. Värden ur alternativa domäner. Ex: x Boolean String Avbildningar. Ex: om namn = Kalle namn[5] = e så 5 e Integer Char DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 15 / 29

Värden och typer... Potensmängder. Ex: om a = {1, 2, 3} så blir potensmängden av a alla delmängder av a = {{}, {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3}}. DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 16 / 29

Värden och typer... Potensmängder. Ex: om a = {1, 2, 3} så blir potensmängden av a alla delmängder av a = {{}, {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3}}. Rekursiva typer. Ex: listor av heltal DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 16 / 29

Värden och typer... Potensmängder. Ex: om a = {1, 2, 3} så blir potensmängden av a alla delmängder av a = {{}, {1}, {2}, {3}, {1, 2}, {1, 3}, {2, 3}, {1, 2, 3}}. Rekursiva typer. Ex: listor av heltal Subtyper Ex: a.. z DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 16 / 29

Kartesiska produkter Kartesiska produkter är en mängd av ordnade värden och S T betyder alla ordnade par s, t där s S och t T. Obs! att s och t kan vara sammansatta. Ex: S = {TRUE, FALSE}, T = {gul, cyan, purpur}. S T = { TRUE, gul, TRUE, cyan, TRUE, purpur, FALSE, gul, FALSE, cyan, FALSE, purpur } DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 17 / 29

Kartesiska produkter... Scheme kan återsända godtyckliga strukturer (define newsxt (lambda (news newt) (cons news newt))) (define spart (lambda (SxT) (car SxT))) (define tpart (lambda (SxT) (cdr SxT))) DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 18 / 29

Disjunkt union I disjunkta unioner måste värdena märkas för att det skall gå att veta vilken domän aktuellt värde tillhör. Ex: S = {TRUE, FALSE}, T = {gul, cyan, purpur}. Den disjunkta unionen S + T innehåller värdena {TRUE, FALSE, gul, cyan, purpur}, men för att kunna skilja mellan olika typer av värden i den disjunkta unionen måste vi deklarera namn som fungerar som etiketter. DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 19 / 29

Avbildningar är funktioner från en datamängd D till en annan datamängd R. Skrivs D R och kan realiseras med hjälp av antingen funktioner eller listor. I de flesta system finns funktioner och kontinuerliga listor (array) fördefinierade. Ex: D = {jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec} R = {winter, spring, summer, autumn} D R = {(jan winter), (feb winter), (mar winter), (apr spring), (may spring), (jun summer), (jul summer), (aug summer), (sep autumn), (oct autumn), (nov autumn), (dec winter)} DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 20 / 29

Avbildningar... I Scheme kan man göra en associationslista av par av månadsnummer, årstid (define season-list ((jan. winter) (feb. winter) (mar. winter) (apr. spring) (may. spring) (jun. summer) (jul. summer) (aug. summer) (sep. autumn) (oct. autumn) (nov. autumn) (dec. winter))) DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 21 / 29

Avbildningar... I Scheme kan man göra en associationslista av par av månadsnummer, årstid (define season-list ((jan. winter) (feb. winter) (mar. winter) (apr. spring) (may. spring) (jun. summer) (jul. summer) (aug. summer) (sep. autumn) (oct. autumn) (nov. autumn) (dec. winter))) (define (month->season month season-list) (cond ((null? season-list) undefined) ((eq? month (caar season-list)) (cdar season-list)) (else (month->season month (cdr season-list))))) month->season har typen (month seasonassociationlist) season DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 21 / 29

Avbildningar... (define (month->season month) ;; med array (let ((month-list #(jan feb mar apr may jun jul aug sep oct nov dec)) (season-list #(winter winter winter spring spring summer summer summer autumn autumn autumn winter))) (define (loop n) (cond ((> n 11) undefined) ((eq? month (vector-ref month-list n)) (vector-ref season-list n)) (else (loop (+ n 1))))) (loop 0))) DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 22 / 29

Avbildningar... (define (month->season month) ;; med array (let ((month-list #(jan feb mar apr may jun jul aug sep oct nov dec)) (season-list #(winter winter winter spring spring summer summer summer autumn autumn autumn winter))) (define (loop n) (cond ((> n 11) undefined) ((eq? month (vector-ref month-list n)) (vector-ref season-list n)) (else (loop (+ n 1))))) (loop 0))) (define (month->season month) ;; med case-uttryck (case month ((dec jan feb mar) winter) ((apr may) spring) ((jun jul aug) summer) ((sep oct nov) autumn) (else undefined))) DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 22 / 29

Potensmängd En potensmängd representerar mängden av alla värden som en mängd kan anta. De flesta språk har ingen inbyggd mekanism för att hantera mängder. Pascal är ett av få undantag. Ex.: Potensmängden 2 season ={{}, {winter}, {spring},..., {winter, spring}, {winter, summer},..., {winter, spring, summer},..., {winter, spring, summer, autumn}} 2 S ={a a S} DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 23 / 29

Potensmängd... I Pascal: TYPE season = (winter, spring, summer, autumn); period = SET OF season; DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 24 / 29

Potensmängd... I Pascal: TYPE season = (winter, spring, summer, autumn); period = SET OF season; I Scheme: (define set (1 2 3)) DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 24 / 29

Potensmängd... I Pascal: TYPE season = (winter, spring, summer, autumn); period = SET OF season; I Scheme: (define set (1 2 3)) (define (ps set) (if (null? set) (()) (let ((r (ps (cdr set)))) (append (map (lambda (s) (cons (car set) s)) r) r)))) DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 24 / 29

Rekursiva typer Rekursivt definierade typer är sådana typer som kan definieras i termer av sig själva. Ex: En lista med heltal kan definieras som: En lista med heltal = antingen tom eller ett heltal följt av en lista med heltal. nil står för den tomma listan. DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 25 / 29

Rekursiva typer Rekursivt definierade typer är sådana typer som kan definieras i termer av sig själva. Ex: En lista med heltal kan definieras som: En lista med heltal = antingen tom eller ett heltal följt av en lista med heltal. nil står för den tomma listan. heltalslista = nil (heltal heltalslista) Eller: L = nil + (S L) DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 25 / 29

Rekursiva typer... I Scheme () (cons 3 ()) (cons 2 (list 3)) (list 2 3) DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 26 / 29

Rekursiva typer... I Pascal krävs pekarstrukturer för att realisera sådana typer, men i ML finns möjlighet till rekursiv definition av typer och dessutom finns fördefinierat ett brett spektrum av listtyp-konstruktorer. DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 27 / 29

Rekursiva typer... I Pascal krävs pekarstrukturer för att realisera sådana typer, men i ML finns möjlighet till rekursiv definition av typer och dessutom finns fördefinierat ett brett spektrum av listtyp-konstruktorer. Ex: heltalslistor type integerlist = int list; datatype integerlist = nil of unit cons of int * integerlist; (* får skrivas som: *) datatype integerlist = nil cons of int * integerlist; DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 27 / 29

Rekursiva typer... I Pascal krävs pekarstrukturer för att realisera sådana typer, men i ML finns möjlighet till rekursiv definition av typer och dessutom finns fördefinierat ett brett spektrum av listtyp-konstruktorer. Ex: heltalslistor type integerlist = int list; datatype integerlist = nil of unit cons of int * integerlist; (* får skrivas som: *) datatype integerlist = nil cons of int * integerlist; med typkonstruktorn list har man tillgång till alla tänkbara listor i ML, ex: type realnumberlist = real list; DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 27 / 29

Subtyper Subtyper är restriktioner på en redan definierad typ (delmängd). Ex: A B, där B är t ex mängden av alla heltal I Pascal kan subtyper definieras av varje diskret typ, men bara som delintervall. Ex: TYPE smallint = -255..255; smallletter = a.. z ; fineseason = spring..autumn; Förutom i Pascal finns dessa i Modula (2, 3, 4) och ADA DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 28 / 29

Nästa gång: När upptäcks typfel? Vad är ett uttryck? DA2001 (Föreläsning 22) Datalogi 1 Hösten 2010 29 / 29