Nya typer Konstruerare, selektorer och predikat Rekursiva datatyper

Slides:



Advertisements
Liknande presentationer
Fritidshem Elever 2013 Fritidshem - Elever 2013 Enhet:
Advertisements

Talföljder formler och summor
Relationsdatabasdesign
Romersk skulptur Exempel Förutsättningar Kännetecken
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004 Datastrukturer och algoritmer Föreläsning 4.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning
Klasser och objekt.
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kapitel 5: CPU-schemaläggning.
Funktioner och programorganisation
1 Listor En sekvens värden av samma typ Nr 5. 2 Listor Sekvens av värden, element Variabelt antal Alla med samma typ Bara första elementet direkt åtkomligt.
1 Logikprogrammering ons 11/9 David Hjelm. 2 Repetition Listor är sammansatta termer. De består av en ordnad mängd element. Elementen i en lista kan vara.
Logikprogrammering, Mån 23/9 Rebecca Jonson. Repetition P :- Q, R. Deklarativ syn: –P är sann om Q och R är sanna. –Av Q och R följer P Procedurell syn:
Stora + Störst tal först. Stora additionstabellen Tanketips!
Abstrakta datatyper Moduler nr 12
1 Ingenjörsmetodik IT & ME 2009 Föreläsare Dr. Gunnar Malm.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2003 Datastrukturer och algoritmer Föreläsning 4.
Datastrukturer och algoritmer Föreläsning 11. Datastrukturer och algoritmer VT08 Innehåll  Mängd  Lexikon  Heap  Kapitel , , 14.4.
Tar fram v ur kön v = R(true,0,Null) och q = (). d = 0 Leta sedan fram grannarna = {A, B} För granne A: newDist = 0+4 = 4. Ej besökt. q = (A(true,4,R))
Föreläsning 2 Datalogi för E1 2D1343
Föreläsning 10 Länkade lista Stack och Kö Att arbeta med listor
Stora additionstabellen
1 Introduktion till SML Nr 2 Värden, typer och funktioner.
© Patrick Blackburn, Johan Bos & Kristina Striegnitz FL 5: Aritmetik Teori –Introducerar Prologs inbyggda operationer för aritmetik –Tillämpar dessa på.
i olika programmeringsspråk
Sid period2CD5250 OOP med C++ Mats Medin MDH/IDT Objektbaserad programmering –Grundläggande om klasser och objekt – (Arv får vänta)  Iden med klasser.
© Anders Broberg, Ulrika Hägglund, Lena Kallin Westin, 2004 Datastrukturer och algoritmer Föreläsning 3.
Sid 1 CD5250 OOP med C++ Daniel Flemström MDH/IDT CD5250 OOP med C++
1 Funktioner Nr 3 Funktionstyper, högre ordningens funktioner och polymorfism.
Programmering i C# 3. Klasser.
Pekare och speciell programstruktur i inbyggda system
Programmering B PHP Lektion 2
Föreläsning 4 Kö Implementerad med array Implementerad med länkad lista Djup kontra bredd Bredden först mha kö.
Föreläsning 2 Kort Översikt Över Javaspråket. Källkodsformat Unicode används åäöμψζ tillåtna Inte alla miljöer klarar av det Källkod Bytekod Java VM för.
Vektorer (klassen Vector) Sortering
Bild 1 Hur använder vi KursInfo idag? Högskolan i Skövde.
TÄNK PÅ ETT HELTAL MELLAN 1-50
1 Träd nr 11 Binära träd ordnade, traversering, sökning.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 8: Underprogram Underprogram Räckvidd Parameteröverföring.
Programspråk Två olika typer av program omvandlar högnivå till lågnivå program: Interpreterande program och kompilerande program. Python är ett interpreterande.
TietoEnator © 2007presentationPage 1 Mina meddelanden Procapita +
1 Föreläsning 3 programmeringsteknik och Matlab 2D1312/ 2D1305 Matlab fortsättning Funkioner, styrstrukturer, manipulering av matriser.
1 Mer om Nr 7 Rekursion, listor, typer och funktioner.
Grundskola Föräldrar 2013 Grundskoleenkät - Föräldrar Enhet:Gillberga skola.
1(31) Ett omdiskuterat ämne. Vad är det som händer? 2.
Riktade listor i C och Java Lösning till gruppövning 1.
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
1 Programmera med strängar nr 9 Tal till sträng Sträng till tal Grep Sträng till lista av ord.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 2 ( ) INNEHÅLL: -Variabler och datatyper -Tilldelning av variabler -Aritmetiska.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 3 ( ) INNEHÅLL: -Tabeller -Villkorssatser -Repetitionssatser.
Prioritets Köer (Priority Queues ), Graph Data Structures & Problem Solving using Java --Kap 21,14.
Ingenjörsmetodik IT & ME 2008
F4 - Funktioner & parametrar 1 Programmeringsteknik, 4p vt-00 Modularisering ”svarta lådor” Väl definierade arbetsuppgifter Enklare validering Enklare.
Stora subtraktionstabellen
William Sandqvist C-programmering ID120V Stack och Kö William Sandqvist
För utveckling av verksamhet, produkter och livskvalitet. Stack och Kö - Implementering - Tilllämpningar.
Datastrukturer och algoritmer
Logikprogrammering 16/ : operatorer Staffan Larsson.
1 ITK:P2 F6 Sortering av generiska containerklasser DSV Peter Mozelius.
Dagens ämnen Matriser Linjära ekvationssystem och matriser
Räkna till en miljard 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,14,15,16,17,18,19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, En miljard är ett.
Aritmetik 3.4 M 8.2 E 2.2. dagens föreläsning operatorer för aritmetik tillämpningar.
1 Mönstermatchning och rekursion Nr 4. 2 Förenklad notation val fnname = fn name => expression Förenklas till fun fnname name = expression Exempel fun.
1 Mjukvaru-utveckling av interaktiva system God utveckling av interaktiva system kräver abstrakt funktionell beskrivning noggrann utvecklingsmetod Slutanvändare.
OOP F2:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 2 Deklaration och tilldelning Programsatser Tilldelning Input/Output Selektion.
Köer -- Kapitel 16. Principen med en kö Köer är FIFO datastrukturer  First In – First Out  enqueue() Lägg till data i kön (först)  dequeue() Hämta.
Föreläsning 13 Logik med tillämpningar Innehåll u Aritmetik i Prolog u Rekursiva och iterativa program u Typpredikat u Metalogiska predikat.
F2 1 Programmeringsteknik, 4p vt-00 Kommentarer Allt mellan /* och */ Varje kommentar byts ut mot en blank av kompilatorn /* Exempel på uttryck, tilldelningsoperatorn.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 12: -kalkylen allmänt om -kalkylen syntax semantik att programmera i -kalkylen.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 3: Abstrakta datatyper Algebror Abstrakta datatyper Inkapsling och informationsmaskering.
Föreläsning 8: Exempel och problemlösning
Presentationens avskrift:

Nya typer Konstruerare, selektorer och predikat Rekursiva datatyper Datatyper nr 10 Nya typer Konstruerare, selektorer och predikat Rekursiva datatyper

Datatyper Hur ska vi på bästa sätt kunna modellera objekt i den verkliga världen?? Ofta behöver man definiera egna datatyper Programmen blir lättare att läsa och förstå. Ökar möjligheterna för typkontroll. Kan användas vid mönstermatchning

Uppräkningsbara typer datatype traffic_light = green | amber | red | redamber; datatype traffic_light con green: traffic_light con amber: traffic_light con red: traffic_light con redamber: traffic_light fun nextstate green = amber | nextstate amber = red | nextstate red = redamber | nextstate redamber = green; val nextstate = fn : traffic_light -> traffic_light

Datatypsdeklaration Skapar en ny typ Skapar nya konstruerare Syntax konstruerarkonstanter, identifierare Syntax datatype type_constructor = value_constructor1 | value_constructor2 | … | value_constructorn

Strukturerad datatyp Kopplar konstrueraren till ett värde av någon given typ datatype coords = coords of real * real * real datatype coords con coords : (real * real * real) -> coords Syntax datatype type_constructor = value_constructor1 [of type_expression1] | value_constructor2 [of type_expression2] | … | value_constructorn [of type_expressionn]

Ta isär dataobjekt Använd mönstermatchning val origin = coords (0.0, 0.0, 0.0); val origin = coords (0.0, 0.0, 0.0) : coords val point_max = coords (100.0, 100.0, 100.0); val point_max= coords(100.0,100.0,100.0):coords fun midpoint (coords (x1,y1,z1)) (coords (x2,y2,z2)) = coords ((x1+x2)/2.0,(y1+y2)/2.0,(z1+z2)/2.0); val midpoint = fn : coords -> coords -> coords midpoint origin point_max; val it = coords (50.0, 50.0, 50.0) : coords

datatype kontra type En datatyp (datatype) En typsynonym (type) En ny typ kan inte jämföras med underliggande typ Ärver ej operationer Kan jämföras för likhet (i den mån underliggande typ kan) Kan ha flera konstruerare Kan ha flera olika underliggande typer (som också kan vara egna datatyper) En typsynonym (type) Ett nytt namn för en existerande typ Har samma värden som den namngivna typen

Unionstyp En datatyp med flera konstruerare motsvarar en union av olika typer datatype numb = itype of int | rtype of real datatype numb con rtype : real -> numb con itype : int -> numb Ett värde av typen numb är antingen ett heltal (konstruerat med itype) eller ett reellt tal (konstruerat med rtype) - rtype 4.0; > val it = (rtype 4.00000) : numb - itype 34; > val it = (itype 34) : numb

Matchning av olika värden För att använda de olika värdena matchar vi mot konstrueraren fun makeint (itype n) = n | makeint (rtype r) = floor r val makeint = fn : numb -> int fun addnumb (itype n) (itype m) = itype (n+m) | addnumb (itype n) (rtype r) = rtype (real n + r) | addnumb (rtype r) (itype m) = rtype (r + real m) | addnumb (rtype r) (rtype s) = rtype (r + s) val addnumb = fn : numb -> (numb -> numb) - addnumb (rtype 4.0) (itype 23); > val it = (rtype 27.0000) : numb

Egna typfunktioner Den definierade typen kan vara en typfunktion som tar typer som argument. Då har typen (prefixa) argument till typnamnet vid deklarationen. datatype 'a queue = que of 'a list; datatype 'a queue con que : 'a list -> 'a queue Det är en eller flera typvariabler datatype ('a,'b) pair = pair of 'a * 'b datatype ('a , 'b) pair con pair : ('a * 'b) -> (('a , 'b) pair)

Användning Vid användning av typen eller konstrueraren måste typen ha argumenten. Dessa binds till typvariablerna. que [2,3,4]; > val it = (que [2,3,4]) : int queue pair (4,true); > val it = (pair (4,true)) : (int , bool) pair fun idqueue (q : (int * int) queue) = q; > val idqueue = fn : (int * int) queue -> (int * int) queue

En kö En kö är en sekvens av värden där man sätter in i ena änden och tar ut ur andra. Vi kan definiera olika typer av funktioner som arbetar med köer. Funktioner för att skapa köer val empty = que nil; val empty = (que nil) : 'a queue; fun enter e (que es) = que (e::es); val enter = fn : 'a -> 'a queue -> 'a queue enter 2.0 (enter 7.5 empty); val it = (que [2.00000, 7.50000]) : real queue;

Selektorer Speciella funktioner för att välja ut delar av en kö. exception Remove and Rest; fun remove (que nil) = raise Remove | remove (que es) = last es; > val remove = fn: 'a queue -> 'a fun rest (que nil) = raise Rest | rest (que (e::nil)) = (que nil) | rest (que (e::es)) = let val (que q2) = rest (que es) in que(e::q2) end; > val rest = fn: 'a queue -> 'a queue

Predikat Funktioner som avgör hur kön är uppbyggd fun isempty (que es) = null es; > val isempty = fn: 'a QUEUE -> bool

Konstruerare vs. funktioner Skillnader: Konstruerar kan matchas i mönster Funktioner beräknar ett resultat utifrån definitionen Konstrueraren bygger ett värde Likheter: Tar argument Kan skickas som parameter, mappas,.. Ej ordnade

Rekursiva datatyper En kö som är antingen tom eller minst ett element lagt sist i en kö datatype 'a queue = empty | enter of 'a * 'a queue; con empty: 'a queue con enter= : ('a * 'a queue) ->'a queue enter (5, enter (3, enter (1,empty))); val it = enter(5,enter(3,enter(1,empty))): int queue

Selektorer exception Remove and Rest; fun remove empty = raise Remove | remove (enter (e, empty)) = e | remove (enter (e, q)) = remove q; val remove = fn: 'a queue -> 'a fun rest empty = raise Rest | rest (enter (e, empty)) = empty | rest (enter (e,q)) = enter (e, rest q); val rest = fn: 'a queue -> 'a queue;

Predikat fun isempty q = q = empty; val isempty = fn: 'a queue -> bool val q1 = enter (5, enter (3, enter (1,empty))); > val q1 = enter (5, enter (3, enter (1,empty))): int queue remove q1; > val it = 1:int rest q1; > val it = enter(5,enter(3,empty))): int queue