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

Relevanta dokument
Typsystem. Typsystem... Typsystem... Typsystem... 2 *

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.

Deklarationer/definitioner/specifikationer

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

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

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

Sista delen av kursen

Sista delen av kursen

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

DD1361 Programmeringsparadigm. Carina Edlund

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

Funktioner, Procedurer och Parametrar. Funktioner, Procedurer och Parametrar... Funktioner, Procedurer och Parametrar procedurspecifikation

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

Föreläsning 6: Introduktion av listor

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

Introduktion till Datalogi DD1339. Föreläsning 2 22 sept 2014

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

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

Språket Python - Del 1 Grundkurs i programmering med Python

Sökning och sortering

TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017

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

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

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?

Procedurer och villkor. Rekursiva procedurer. Exempel: n-fakultet

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

Procedurer och villkor

Tentamen OOP

Funktionell programmering DD1361

Kontinuerliga listor. Fält (listor) Kontinuerliga listor... Kontinuerliga listor...

Poster. Vi har ofta behov av att behandla klumpar av data som i sig är inhomogena men sett över ett helt register har klumparna lika struktur.

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

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

Tentamen Grundläggande programmering

Idag: Dataabstraktion

BEGREPP HITTILLS FÖRELÄSNING 2 SAMMANSATTA UTTRYCK - SCHEME DATORSPRÅK

Pascal. Vi har ofta behov av att behandla klumpar av data som i sig är inhomogena men sett över ett helt register har klumparna lika struktur.

Poster... Poster. Poster... Poster...

Standardfilerna Input och Output

Att deklarera och att använda variabler. Föreläsning 10. Synlighetsregler (2) Synlighetsregler (1)

Standardfilerna Input och Output. Filer... Filer... vanlig utbyggnad för ökad dynamik. Filer... filtyper

Föreläsning 5: Introduktion av pekare

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

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

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Muddy. Funktioner / metoder. Punktnotation. Evalueringsordning

Variabler, värden och typer

I dag: Blockstruktur, omgivningar, problemlösning

Variabler, värden och typer

Föreläsning 9 Exempel

Våra enkla funktioner eller procedurer

TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 9 juni 2016, kl 14 18

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

FÖRELÄSNING 1 PERSONAL TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017 SYFTE EXAMINATION ORGANISATION

Förra gången: Primitiva data

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

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

Idag. Javas datatyper, arrayer, referenssemantik. Arv, polymorfi, typregler, typkonvertering. Tänker inte säga nåt om det som är likadant som i C.

Programdesign. Dokumentera. Dokumentera

(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

Programdesign. minnesutrymme storlek på indata. DA2001 (Föreläsning 15) Datalogi 1 Hösten / 20

Några saker till och lite om snabbare sortering

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

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

Tentamen i. TDDA 69 Data och programstrukturer

Objektorienterad Programmering (TDDC77)

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

FÖRELÄSNING 2, TDDC74, VT2018 BEGREPP PROBLEMLÖSNING MED HJÄLP AV FALLANALYS PROBLEMLÖSNING MED HJÄLP AV REKURSION

Datatyp - mera. Begreppet värde, igen. Ett slags mått på en egenskap, eller något fenomen. Ska ges en bred tolkning!

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)

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

Att förstå hur man konstruerar modulära program Att kunna skapa nya funktioner Att förstå hur data skickas mellan funktioner

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

Klassdeklaration. Metoddeklaration. Parameteröverföring

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

Objektorienterad Programmering (TDDC77)

TDDC74 Programmering, abstraktion och modellering. Tentamen

732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Felsökning. Datatyper. Referenstyper. Metoder / funktioner

Parameteröverföring. Exempel. Exempel. Metodkropp

Visual Basic, en snabbgenomgång

Programkonstruktion och datastrukturer. Formell verifiering eller hur man bevisar att program gör rätt utan att testa dem

Bankkonto - övning. Övning 2 Skriv en metod, geträntan, som returnerar räntan.

I Skapa Hej.java och skriv programmet. I Kompilera med javac Hej.java. I Rätta fel och repetera tills du lyckas kompilera ditt program

Dagens föreläsning. Diverse Common Lisp. Konstanter, parametrar, globala variabler

KOMPLETTERANDE HEMTENTAMEN TDDB53

TENTAMEN OOP

Variabler och konstanter

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

Imperativ programmering. Föreläsning 2

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

Introduktion till Datalogi DD1339. Föreläsning 3 29 sept 2014

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

1 Uppgift 1. a) Skapar ett Company-objekt med hjälp av den överlagrade konstruktorn. Du kan själv välja värden på instansvariablerna.

TDDC74 Programmering, abstraktion och modellering. Tentamen

Föreläsning 5&6 LOGISKA VARIABLER; IMPLEMENTERA KLASSER; MER ALGORITMER

Föreläsning 5-6 Innehåll. Exempel på program med objekt. Exempel: kvadratobjekt. Objekt. Skapa och använda objekt Skriva egna klasser

Exempel på ett litet Ada-program

Föreläsning 3: Typomvandling, villkor och val, samt textsträngar

Föreläsning 5-6 Innehåll

KOMPLETTERANDE HEMTENTAMEN 2 TDDB53

Transkript:

Typsystem Typsystem finns i alla programmeringsspråk. Avsikten med typsystem är att kontrollera att uttryck är säkra i den bemärkelsen att innebörden i operanderna är klar och inte är motsägelsefull och att betydelsen av en operation är väldefinierad Ex: 38 + pelle, där 38 kan vara heltal, reellt tal eller en textsträng och pelle är en textsträng. Möjliga betydelser t.ex.: konkatenera textsträngarna 38 och pelle behandla pelle som ett heltal och lägg detta till 38 DA2001 (Föreläsning 23) Datalogi 1 Hösten 2010 1 / 19

Typsystem... I vissa programmeringsspråk är typningen dynamisk d.v.s. att variabler inte har någon typ utan endast värden har typ. Då måste typen hos uttryck framgå av hur man använder variablerna och kontrollen sker under körning av programmet. Scheme har dynamiskt typsystem. Ex: (define (f x) (+ 2 (square x))) (define (square a) (* a a)) (f "kalle") DA2001 (Föreläsning 23) Datalogi 1 Hösten 2010 2 / 19

Typsystem... Här kommer felet att upptäckas först då man försöker applicera funktionen * på argumenten kalle och kalle. Motsvarande evalueringsträd blir + 2 * kalle kalle Multiplikationsoperatorn kräver numeriska argument. DA2001 (Föreläsning 23) Datalogi 1 Hösten 2010 3 / 19

Typsystem... Andra språk har statisk typning, vilket innebär att all typkontroll sker vid översättningstillfället (kompileringstillfället eller interpretationen), varvid ingen tveksamhet får finnas avseende operationers typöverensstämmelse. Både Pascal och ML är statiskt typade språk. Ex (Pascal): PROGRAM test; FUNCTION square(a: Real): Real; BEGIN square := a * a; END; FUNCTION f(x: Real): Real; BEGIN f := 2 + square(x); END; BEGIN WriteLn(f(4), f(3.1)); END. DA2001 (Föreläsning 23) Datalogi 1 Hösten 2010 4 / 19

Typsystem... Ex (ML): fun f(x: real) = 2.0 + square(x); fun square(a:real) = a * a; f(3.1); (* går bra, men.. *) f(3); (* går inte bra, men f(real 3) går *) f("kalle"); (* går inte bra *) DA2001 (Föreläsning 23) Datalogi 1 Hösten 2010 5 / 19

Typekvivalens Om en operation som tar en typ av argument anropas med en annan typ av argument måste de två argumenttyperna i någon mening vara lika för att en typkontroll skall vara genomförbar. Vad menas med att typerna är lika? Ex (Pascal): TYPE atype = ARRAY [1..3] OF Integer; btype = ARRAY [1..3] OF Integer; VAR a: atype; b: btype; c: btype; d: ARRAY [1..3] OF Integer; Här är b och c av samma typ, medan a, b och d är av olika typ. DA2001 (Föreläsning 23) Datalogi 1 Hösten 2010 6 / 19

Typekvivalens... Man kan inse nödvändigheten av typspecifikation i Pascal vid användande av underprogram (moduler). Ex: FUNCTION f(a: ARRAY [1..3] OF Integer): Integer; är en omöjlighet eftersom ingen typ är ekvivalent med a s typ. Ovanstående typekvivalens kallas namnekvivalens, vilket betyder att typernas namn, inte deras struktur, avgör ekvivalensen. Ex: TYPE T1 = Integer; T2 = Integer; VAR a : T1; b : T2; Trots att T1 och T2 är definierade som en typ av Integer är inte T1 och T2 samma typ eftersom namnen är olika. a + b är inte en tillåten operation. DA2001 (Föreläsning 23) Datalogi 1 Hösten 2010 7 / 19

Typekvivalens... Två variabler har samma typ om de deklareras i samma deklarationssats. Ex (Pascal): VAR a, b: ARRAY [3..9] OF Integer; c: ARRAY [3..9] OF Integer; Här har a och b samma typ men inte a och c resp b och c. Man skulle kunna betrakta strukturen hos en typ i stället för namnet på typen och betrakta två typer som lika om deras struktur överensstämmer, oavsett namnet och platsen för specifikation. Man måste då rekursivt analysera strukturen hos typerna för att kunna avgöra om dessa är lika eller inte. DA2001 (Föreläsning 23) Datalogi 1 Hösten 2010 8 / 19

Typekvivalens... Definition (strukturell ekvivalens): Två typer T och T är typekvivalenta omm de har samma värdemängd. Det betyder att T och T är typekvivalenta ( ) om 1. T och T båda är primitiva och identiska, t ex: boolean boolean och 1..35 1..35 2. T = A B och T = A B och A A och B B 3. T = A + B och T = A + B samt A A och B B eller A B och B A 4. T = A B och T = A B och A A och B B DA2001 (Föreläsning 23) Datalogi 1 Hösten 2010 9 / 19

Typekvivalens... Ex: TYPE i = 1..10; a = ARRAY [ a.. z ] OF ARRAY [Boolean] OF i; b = ARRAY [Boolean] OF i; c = ARRAY [ a.. z ] OF b; FUNCTION f(x: a; b: Boolean; ch: Char): i; BEGIN... END; FUNCTION g(x: c; b: Boolean; ch: Char): i; BEGIN... END; DA2001 (Föreläsning 23) Datalogi 1 Hösten 2010 10 / 19

Typekvivalens... f och g är strukturellt ekvivalenta men inte namnekvivalenta, ty: f har typen a Boolean Char i, g har typen c Boolean Char i, A = a Boolean Char, B = i, A = c Boolean Char, B = i. B B. A A om a c. a = Char (Boolean i) och c = Char (Boolean i), så a c. DA2001 (Föreläsning 23) Datalogi 1 Hösten 2010 11 / 19

Typsystem... Ett språk kallas typkomplett om alla värden kan hanteras utan speciella restriktioner för vissa värdetyper. Pascal är inte typkomplett eftersom funktioner inte kan returnera alla typer av värden som resultat. Man kan t ex inte få funktioner, procedurer, poster eller kontinuerliga listor som resultat av funktioner. Sådana värden (för vilka någon speciell restriktion gäller) kallas andra klassens värden. Värden, för vilka inga speciella restriktioner gäller, kallas första klassens värden. Scheme och ML är typkompletta. DA2001 (Föreläsning 23) Datalogi 1 Hösten 2010 12 / 19

Typsystem... Pascal: TYPE pairptr = ˆpair; pair = RECORD a, b: sometype; END; FUNCTION swap(p: pairptr): pairptr; BEGIN... swap := p; END; ML: fun swap (a, b) = (b, a);! (... ) är en konstruktor!! mönstermatchning! Scheme: (define (swap x) (list (cadr x) (car x))) DA2001 (Föreläsning 23) Datalogi 1 Hösten 2010 13 / 19

Uttryck Uttryck kallas de programdelar vars beräkning resulterar i att ett värde levereras till omgivningen. Vi delar in uttrycken i: literaler aggregat funktionsanrop villkorliga uttryck konstanters och variablers värden DA2001 (Föreläsning 23) Datalogi 1 Hösten 2010 14 / 19

Uttryck... En literal är en symbol för ett värde av någon typ, t ex 3.14-78 4711 a januari true 2/7 Konstanters värden. I Pascal kan man definiera konstanter först i deklarationsdelen i varje modul. CONST pi = 3.141592; firstmonth = Januari ; Man definierar en identifierare som identifierar ett värde, givet av en literal. I andra språk kan det vara tillåtet att skriva ett uttryck i stället för en literal. DA2001 (Föreläsning 23) Datalogi 1 Hösten 2010 15 / 19

Uttryck... Variablers värden. Då man i Pascal deklarerar ett namn, t ex: VAR anumber: Integer; kommer namnet anumber att identifiera det minnesutrymme där ett värde av typen Integer lagras. Minnesutrymmet kallas variabel och namnet (identifieraren) används för att komma åt variabeln. För att ändra variabelns värde används en tilldelningsoperator, ofta :=, t ex: anumber := 10. För att avläsa variabelns värde används identifieraren i något uttryck, t ex: IF anumber > 3 THEN... Villkorliga uttryck är uttryck vars värde beror av ett eller flera andra uttryck. Ett villkorligt uttryck måste konstrueras så att det alltid lämnar ett värde som resultat. DA2001 (Föreläsning 23) Datalogi 1 Hösten 2010 16 / 19

Uttryck... Ex (Scheme): (cond ((< x y) (if (< y z) y (if (< x z) z x))) (else (if (< z y) y (if (< x z) x z)))) Ex (ML): case x < y of true => if y < z then y else if x < z then z else x false => if z < y then y else if x < z then x else z; Ex (Simula): IF x < y THEN (IF y < z THEN y ELSE IF x < z THEN z ELSE x) ELSE (IF z < y THEN y ELSE IF x < z THEN x ELSE z); DA2001 (Föreläsning 23) Datalogi 1 Hösten 2010 17 / 19

Uttryck... Aggregerande uttryck skapar vid evaluering aggregat. Ex (Scheme): (list x y z) Ex (ML): [x, y, z] (* lista med tre element *) Ex (ML): (x, y, z) (* tupel med tre attribut *) Ex (ML): {x=7, y=5, z=13} (* post med fälten x, y och z *) I ML finns alltså tre olika konstruktorer för aggregat: [ ] för listor, där alla element skall vara av samma typ, ( ) för tupler, där elementen får vara av olika typ, { } för poster, där elementen har namn och får vara av olika typ. Obs att tupler är poster med anonyma fält, och att alla sorters poster är av typen kartesisk produkt, medan listorna är rekursivt definierade typer. DA2001 (Föreläsning 23) Datalogi 1 Hösten 2010 18 / 19

Uttryck... Funktionsanrop sker genom att en funktion appliceras på sina argument (en lista av aktuella parametrar): Scheme: (funktionsnamn arg 1 arg 2... arg n ) En Schemefunktion kan konstrueras för att återsända varje typ av resultat. Ex: (define f (lambda (n) (lambda (m) (max m n)))) (f 5) ;;; ger en funktion int int ((f 5) 7) ;;; ger ett heltal Pascal: funktionsnamn(arg 1, arg 2,..., arg n ) En Pascalfunktion kan endast återsända atomiska resultat. DA2001 (Föreläsning 23) Datalogi 1 Hösten 2010 19 / 19