1 Funktioner Nr 3 Funktionstyper, högre ordningens funktioner och polymorfism.

Slides:



Advertisements
Liknande presentationer
Att förstå anonymiteten (översättning från
Advertisements

Här ser ni några sidor som hjälper er att lösa uppgifterna:
Kap 1 - Algebra och linjära modeller
Klasser och objekt.
Silberschatz, Galvin and Gagne ©2009 Operating System Concepts – 8 th Edition, Kapitel 5: CPU-schemaläggning.
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.
Leif Håkansson’s Square Dancer Rotation
Nya typer Konstruerare, selektorer och predikat Rekursiva datatyper
De fundamentala datatyperna
Klassarv och inkapsling
Abstrakta datatyper Moduler nr 12
1 Ingenjörsmetodik IT & ME 2009 Föreläsare Dr. Gunnar Malm.
Eddie Arnold - Make The World Go Away Images colorées de par le monde Déroulement automatique ou manuel à votre choix 1 för dig.
Elkraft 7.5 hp distans: Kap. 3 Likströmsmotorn 3:1
Föreläsning 4 Python: mera om funktioner och parametrar
Välkommen Vahid Mosavat
Föreläsning 4 Python: Definiering av egna funktioner Parametrar
Föreläsning 2 Primitiva datatyper Variabler och konstanter Tilldelning Inläsning Operatorer Villkorssatsen if Slingor: while och for.
Stora additionstabellen
1 Föreläsning 6 Klass Object, instans av klass public/private Klassvariabler och klassmetoder.
V E R S I O N N R 2. 0 T A V E L I D É E R I M I L J Ö.
Bastugatan 2. Box S Stockholm. Blad 1 Läsarundersökning Maskinentreprenören 2007.
1 Introduktion till SML Nr 2 Värden, typer och funktioner.
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.
Programmering B PHP Lektion 2
Programmering B PHP Lektion 3
INFÖR NATIONELLA PROVET
Föreläsning 11 Arrayer.
Programmering i C# 3. Klasser.
Jonny Karlsson INTRODUKTION TILL PROGRAMMERING Föreläsning 6 ( ) INNEHÅLL: -Mera om tabeller.
Pekare och speciell programstruktur i inbyggda system
Programmering B PHP Lektion 2
Från binära till hexadecimala
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.
Bild 1 Hur använder vi KursInfo idag? Högskolan i Skövde.
Arbetspensionssystemet i bilder Bildserie med centrala uppgifter om arbetspensionssystemet och dess funktion
Det handlar om multiplikation
TÄNK PÅ ETT HELTAL MELLAN 1-50
1 Joomla © 2009 Stefan Andersson 1. 2 MÅL 2 3 Begrepp Aktör: en användare som interagerar med webbplatsen. I diagrammet till höger finns två aktörer:
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 8: Underprogram Underprogram Räckvidd Parameteröverföring.
Kouzlo starých časů… Letadla Pár foteček pro vzpomínku na dávné doby, tak hezké snění… M.K. 1 I Norrköping får man inte.
Best pictures on the internet 2007 Awards 1http:// Är vänsteralliansen trovärdig i Norrköping.
Programspråk Två olika typer av program omvandlar högnivå till lågnivå program: Interpreterande program och kompilerande program. Python är ett interpreterande.
Funktioner, styrstrukturer, manipulering av matriser
1 Föreläsning 3 programmeringsteknik och Matlab 2D1312/ 2D1305 Matlab fortsättning Funkioner, styrstrukturer, manipulering av matriser.
1 Föreläsning 7 Repetition Instansvariabler och klassvariabler Klassmetoder och Instansmetoder.
1 Mer om Nr 7 Rekursion, listor, typer och funktioner.
Best pictures on the internet 2007 Awards 1http:// (s), (v), och (mp) i Norrköping, gillar inte att vi använder grundlagarna.
Arbetspensionssystemet i bilder Bildserie med centrala uppgifter om arbetspensionssystemet och dess funktion
1 Föreläsning 6 Programmeringsteknik och Matlab 2D1312/2D1305 Metoder & parametrar Array API och klassen ArrayList.
1 Föreläsning 5 Programmeringsteknik och Matlab 2D1312/2D1305 Repetition Metoder Array API och klassen ArrayList.
F. Drewes, Inst. f. datavetenskap1 Föreläsning 11: Funktionella språk Funktioner och variabler i matematiken Funktionella språk LISP, ML och.
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.
Ingenjörsmetodik IT & ME 2008
F. Drewes, Inst. f. datavetenskap1 Föreläsning 8: Underprogram Underprogram Räckvidd Parameteröverföring.
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.
Bild 1 Prognos för länets arbetsmarknad Stefan Tjb.
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.
OOP F2:1 Stefan Möller OOP Objekt-orienterad programmering Föreläsning 2 Deklaration och tilldelning Programsatser Tilldelning Input/Output Selektion.
Föreläsning 13 Logik med tillämpningar Innehåll u Aritmetik i Prolog u Rekursiva och iterativa program u Typpredikat u Metalogiska predikat.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 12: -kalkylen allmänt om -kalkylen syntax semantik att programmera i -kalkylen.
Föreläsning 2 programmeringsteknik och Matlab 2D1312/ 2D1305
F. Drewes, Inst. f. datavetenskap1 Föreläsning 12: -kalkylen allmänt om -kalkylen syntax semantik att programmera i -kalkylen.
Föreläsning4 Repetition slingor Metoder. while-sats består av följande delar: 1. while 2. Villkor-sats (condition) 3. uttryck (statement) while-sats int.
Lennart Edblom, Frank Drewes, Inst. f. datavetenskap 1 Föreläsning 3: Abstrakta datatyper Algebror Abstrakta datatyper Inkapsling och informationsmaskering.
Presentationens avskrift:

1 Funktioner Nr 3 Funktionstyper, högre ordningens funktioner och polymorfism

2 Explicit typning Systemet kan inte alltid ge typen åt ett uttryck. - fn x => x * x; Error: overloaded variable cannot be resolved : * (MoscowML ger typen int -> int) Vi måste då explict ge typinformation till system så att den kan avgöra vilken operator som avses. Den formella parametern kan ges en typ. fn (name : type) => expression Exempel - (* square an integer *) val sq = fn (x : int) => x * x; > val sq = fn : int -> int

3 Varför explicit typning Alla uttryck kan ges en explicit typ (expression : type) Varför bör man? –Krävs ibland för att lösa överlagring –Ge information till en användare –Kontroll av att härled och förväntad typ är lika

4 Abstraktion över funktioner Om man abstraherar över en funktion får man en funktion som ger en funktion som resultat. - val taxdue = fn tax => fn sum => sum * tax div 100; > val taxdue = fn : int -> int -> int (taxdue 40) 1000 ==> ((fn tax => fn sum => sum * tax div 100) 40) 1000 ==> (fn sum => sum * 40 div 100) 1000 ==> 1000 * 40 div 100 ==> div 100 => 400

5 Exempel - taxdue 40; > fn : int -> int - (taxdue 40) 1000; > 400 : int - val tax25 = taxdue 25; > val tax25 = fn : int -> int - tax ; > 250 : int

6 Fler exempel fn word => word^"s" fn word => word^"ed" fn ending => fn word => word^ending - val endword = fn ending => fn word => word^ending > val endword = fn : string -> string -> string - val plural = endword "s" > val plural = fn : string -> string - val ended = endword "ed" > val ended = fn : string -> string - plural "boat"; > boats : string

7 Högre ordningens funktion En funktion som tar en funktion som argument och/eller ger en funktion som resultat

8 Funktioner som argument Abstrahera ut funktioner ur funktionskroppen fn func => …(func expression)… val cube = fn (x : int) => x * x * x val doublesq = fn (x : int) => 2 * (sq x) val doublecube = fn (x : int) => 2 * (cube x) - val doublefun = fn func => fn (x : int) => 2 * (func x) > val doublefun = fn : (int -> int) -> int -> int

9 Exempel (doublefun sq) 4 ==> ((fn func => fn (x : int) => 2 * (func x)) sq) 4 ==> (fn (x : int) => 2 * (sq x)) 4 ==> 2 * (sq 4) ==> 2 * 16 ==> 32

10 Exempel val fourth = fn (x : int) => sq (sq x) val ninth = fn (x : int) => cube (cube x) - val twice = fn f => fn (x : int) => f (f x) > val twice = fn : (int -> int) -> int -> int (twice sq) 4 ==> ((fn f => fn (x : int) => f (f x)) sq) 4 ==> (fn (x : int) => sq (sq x)) 4 ==> sq (sq 4) ==> sq 16 ==> 256 val fourth = twice sq val ninth = twice cube

11 Polymorfism När typen hos ett värde (funktion) innehåller typvariabler En typvariabel kan anta vilken typ som helst Polymorfism ger funktioner möjlighet att ta argument av olika typ. Istället för att skapa flera funktioner som gör exakt samma sak men på olika typer, skapar vi en funktion som är polymorf och därför kan ta olika typ på argument.

12 Exempel - val doublefun = fn func => fn (n:int)=> 2*func n; > val doublefun = fn : (int -> int) -> int -> int - val doublefun = fn func => fn n => 2 * func n > val doublefun = fn : ('a -> int) -> 'a -> int - val doublefloor = doublefun floor > val doublefloor = fn : real -> int - val doublersize = doublefun size > val doublesize = fn : string -> int - val twice = fn f => fn x => f (f x) > val twice = fn : ('a -> 'a) -> 'a -> 'a - val double_s = twice plural > val double_s = fn : string -> string - double_s "lo"; > "loss" : string

13 Polymorfa funktioner, tre fall Den formella parametern använd aldrig. - fun three x = 3; > val three = fn : 'a -> int Den formella parametern flyttas bara omkring. - fun fst (x,y) = x; > val fst = fn : 'a * 'b -> 'a Den formella parametern skickas bara till funktioner som i sig är polymorfa - fun snd_fst (x,y) = snd x > val snd_fst = fn : ('a * 'b) * 'c -> 'b

14 Begränsad polymorfism För att kunna testa på likhet behöver inte typen hos argumentet vara mer bestämda än att man vet att de kan jämföras. Alla värden kan testas på likhet utom funktioner (och abstrakta datatyper). Funktioner som använder lika med ( = ) eller skilt ifrån ( <> ) kan ges en delvis polymorf typ. - fun all_eq (x,y,z) = x = y andalso y = z > val all_eq = fn : ''a * ''a * ''a -> bool

15 Polymorfism, begränsad polymorfism och överlagring En polymorf funktion undersöker inte innehållet i sitt argument, det är en funktion som kan användas på argument av alla typer. En begränsad polymorf funktion använder sina argument endast för att undersöka likhet och olikhet, den kan användas på argument av alla typer som det går att testa likhet på. En överlagrad funktion är flera funktioner med samma namn, det är typen hos argumentet som avgör vilken av de olika funktionerna som ska användas.

16 Funktionskomposition Applicera en funktion på resultatet av en funktionsapplikation sin (cos x) och sqrt (real 25) val compose = fn f => fn g => fn x => f (g x) –x har samma typ som domäntypen hos g –g x har samma typ som domäntypen hos f –resultatet samma typ som resultattypen hos f f : 'a -> 'b g : 'c -> 'a x : 'c compose : ('a -> 'b) -> ('c -> 'a) -> 'c -> 'b

17 Exempel - compose sqrt > fn : ('a -> real) -> 'a -> real - (compose sqrt) real > fn : int -> real - compose sqrt real 16 > 4.0 : real compose sqrt real 16 ==> (fn f => fn g => fn x => f (g x)) sqrt real 16 ==> (fn g => fn x => sqrt (g x)) real 16 ==> (fn x => sqrt (real x)) 16 ==> sqrt (real 16) ==> sqrt 16.0 ==> 4.0

18 Mer exempel o är samma som compose fast infix (f o g) x = f (g x) - (sqrt o real) 16 > 4.0 : real - val fourth = sq o sq - val ninth = cube o cube - val twice = fn f => f o f > val twice = fn : ('a -> 'a) -> 'a -> 'a

19 Räckvidd Alla namn som används måste vara definierade! –Antingen i en värdes deklaration eller som formell parameter Var kan vi använda namn och till vilken introduktion av namnet kopplas användningen avgörs av räckvidden. fn x => fn x => 2 * x –Till vilken abstraktion binds x i 2 * x

20 Räckviddsregler Alla programspråk har regler som avgör var namn får användas och hur användningen kopplas till definition En användning av en formell parameter kopplas till den innersta omslutande funktion som binder den formella parametern. Användningen av ett värdesnamn kopplas till den textmässigt senaste definitionen i programmet.

21 Exempel Givet följande program: val x = 10; val y = x * 7; val x = 3; val z = x + y; Vilket värde har z?

22 The value of it! Värdet av det senast beräknade uttrycket ; > val it = 81 : int - it * it; > val it = 6561 : int - it div 23; > val it = 285 : int

23 Funktionsapplikation! Än en gång!! Evaluering av funktionsapplikation funexpr argexpr 1.Evaluera funktionsuttrycket funexpr till en funktion fn name => body. 2.Evaluera argumentet argexpr till ett värde value. 3.Byt ut alla förekomster av den formella parametern name i funktionskroppen body mot argumentets värde value. 4.Evaluera funktionskroppen body.

24 Testning!! Att testa sina program är en mycket viktig del av programmeringen. En funktion bör testas med värden som representerar olika tänkbara fall. Kontrollera både de väntade fallen och gränsfallen. –T ex för en funktion som tar strängar som argument kontrollera med tomma strängen ""

25 Kommentera dina funktioner med tester (* Namn : twice = fn f => fn x Syfte: Applicerar funktionen f två gånger på x Typ : val twice = fn : ('a -> 'a) -> 'a -> 'a Test : - twice sqrt 625.0; > val it = : real - twice sq 3; > val it = 81 : int *)