Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

Paradigmer i Programmering 1. Program for idag 9.30 - 10.30: Funktioner og udtryk i SML 11.00 - 12.00: Øvelse 12.00 - 13.00: Frokost 13.00 – 14.00: Deklarative.

Lignende præsentationer


Præsentationer af emnet: "Paradigmer i Programmering 1. Program for idag 9.30 - 10.30: Funktioner og udtryk i SML 11.00 - 12.00: Øvelse 12.00 - 13.00: Frokost 13.00 – 14.00: Deklarative."— Præsentationens transcript:

1 Paradigmer i Programmering 1

2 Program for idag 9.30 - 10.30: Funktioner og udtryk i SML 11.00 - 12.00: Øvelse 12.00 - 13.00: Frokost 13.00 – 14.00: Deklarative sprog 14.15 – 15.15: Oversigt over SML

3 SML: fortolket/oversat Et SML program består af udtryk og erklæringer af funktioner. Vi skal se på: Simple typer Udtryk Sammensatte typer Erklæringer

4 SML fortolker Beder om udtryk/erklæring el.lign udregner og gemmer værdi: Moscow ML version 2.00 (June 2000) Enter `quit();' to quit. - 3; > val it = 3 : int - val x = it+4; > val x = 7 : int - fun f x = x+1; > val f = fn : int -> int - f 3; > val it = 4 : int

5 SML fortolker - 3; > val it = 3 : int Et simpelt udtryk udregnes og værdi gemmes under navnet it - val x = it+4; > val x = 7 : int Bind navnet x til værdien af udtrykket - fun f y = y+1; > val f = fn : int -> int Definer funktion f som lægger en til argumentets værdi - f 3; > val it = 4 : int Typisk ikke parentes om parametre og argumenter.

6 Simple værdier int : heltal 0, 1, 2, negative tal ~1, ~2 real : ”kommatal” 1.0 1.2E10 char : tegn #”3”, #”\n” string: tekststrenge ”Hej Verden” bool: logiske værdier: true, false Java: int, double, char, String, boolean

7 Eksempel - 3; > val it = 3 : int - 3.0; > val it = 3.0 : real - #"3"; > val it = #"3" : char - "3"; > val it = "3" : string - 3=3; > val it = true : bool ML udregner værdien og typen af udtryk

8 Funktioner Funktioner er erklæres med nøgleordet ” fun ” fun ernul i = if i = 0 then true else false; Eller måske lidt enklere fun ernul i = (i = 0); Eller med mønstergenkendelse fun ernul 0 = true | ernul i = false;

9 Eksempel - fun ernul i = (i=0); > val ernul = fn : int -> bool - fun ernul 0 = true | ernul 1 = false; ! Toplevel input: !....ernul 0 = true ! | ernul 1 = false. ! Warning: pattern matching is not exhaustive > val ernul = fn : int -> bool -

10 Udtryk Udtryk med tal: +, -, *, /, div, mod, =, <>, =, > Udtryk med tekststrenge: ^ Eksempler 2+3*4 ”hej” ^ ” ” ^ ”verden” I Java er strengsammensætning ”+”, i PHP ”.”

11 Flere udtryk if... then... else... andalso...... orelse... I Java:... ?... :...... &&...... ||...

12 Funktioner på strenge substring(x,i,l) returnerer delstreng af x som starter i position 0 og er l lang size x returnerer længde af strengen x

13 Standard funktioner (simple) abs : real/int -> real/int ceil : real -> int chr : int -> char floor : real -> int not : bool -> bool ord : char -> int print : string -> unit real : int -> real round : real -> int size : string -> int str : char -> string substring : string * int * int -> string trunc : real -> int plus mange flere i biblioteker

14 Eksempel Moscow ML version 2.00 (June 2000) Enter `quit();' to quit. - fun digit i = chr(i+ord(#"0")); > val digit = fn : int -> char - digit 2; > val it = #"2" : char

15 Lav blanke Lav funktion som kaldes med et tal og returnerer streng bestående af så mange blanktegn blanke 0 = ”” blanke 1 = ” ” blanke 2 = ” ” Vink: vi skal bruge rekursion

16 fun blanke - fun blanke 0 = "" | blanke n = " " ^(blanke (n-1)); > val blanke = fn : int -> string - blanke 7; > val it = " " : string - blanke 2; > val it = " " : string

17 Højrejuster lav funktion som tager en streng og en længde og returnerer strengen højrejusteret i en streng af den givne længde hjuster(”hej”,4) = ” hej” hjuster(”hej”,7) = ” hej”

18 fun hjuster - fun hjuster (x,l) = (blanke (l - (size x)))^x; > val hjuster = fn : string * int -> string - hjuster("hej",7); > val it = " hej" : string - hjuster("hej",3); > val it = "hej" : string -

19 Opgaver lav funktioner fun startermed(x,y): string * string -> bool som undersøger om x starter med strengen y fun fjernblanke x: string -> string som returnerer en streng hvor alle blanktegn er fjernet fun taelord x: string -> int som tæller antal ord i strengen x

20 Flere opgaver Lav funktioner fun tiltekst i : int -> string og fun fratekst s : string -> int som konverterer mellem tekst og tal

21 Funktionsprogrammering 1941: λ-kalkule, Alonzo Church Notation for at beskrive beregninger (λx. λy.y x) (λz.z) (λv.v) = (λy.y (λz.z)) (λv.v) = (λv.v) (λz.z) = (λz.z)

22 Lisp 1958- Lisp, John McCarthy utypet funktionsprogrammering - inspireret af λ-kalkulen (define sq (lambda (x) (* x x))) Værdier og programmer er binære træer (define.(sq.((lambda. ((x.nil).((*.(x.(x.nil)))))))))

23 Senere sprog Scheme 1975, Steele & Sussman Dovne funktionssprog (evaluerer ikke argumenter før det er nødvendigt): Haskell, Hudak, Wadler et.al 1990 Miranda: David Turner, 1986

24 ML ML: Meta Language startede som en slags ”scripting” sprog i et bevissystem kaldet LCF udviklet i Edinburgh fra 1978 Senere ”standardiseret” som programmeringssprog: SML Formel beskrivelse: Milner, Tofte, Harper 1990

25 Karakteristisk: Programmering med rekursion Ikke variable og tildelinger (måske som ekstra) Spildopsamling Funktioner er også værdier Rækkefølge af udregning ligegyldig

26 Mere om SML Datatyper, tupler, lister Højere-ordens funktioner Typeinferens Oversatte programmer (modsat fortolket) I/O, interaktive programmer Moduler, signaturer, functorer

27 Struktureret data Tupler: fun hjuster(x,l) =.. men tupler kan også bruges som værdier fun swop(x,y) = (y,x); Tupler samler værdier som ikke nødvendigvis er af samme type

28 Lister Rækker af værdier af samme type - lidt a la tabeller (arrays) eller vektorer. tom liste: [] liste med flere tal [1,2,3] tilføje tal 0::[1,2,3] sammensætte lister [1,2,3] @ [4,5,6]

29 Datatyper Datatyper - lidt a la nedarvning i java datatype shape = Circle of real | Square of real | Triangle of real * real * real ; shape værdier skapes med konstruktorer. En shape værdi er så en af de tre slags.

30 Højere ordens funktioner fun sum f 0 = 0 | sum f n = (f n)+ (sum f (n-1)); fun dbl x = x*2; sum dbl 3;

31 Typeinferens fun id x = x id har type ’a -> ’a dvs den returnerer værdi af samme type som argumentet fun eq(x,y) = (x=y) har type ’’a*’’a -> bool De to argumenter skal have samme type og de skal kunne sammenlignes med lig med


Download ppt "Paradigmer i Programmering 1. Program for idag 9.30 - 10.30: Funktioner og udtryk i SML 11.00 - 12.00: Øvelse 12.00 - 13.00: Frokost 13.00 – 14.00: Deklarative."

Lignende præsentationer


Annoncer fra Google