Præsentation er lastning. Vent venligst

Præsentation er lastning. Vent venligst

Paradigmer i Programmering 1. Plan for kurset 4 x Mads R, 4 x Torben B, 2 x opgave MR: Funktionsprogrammering, SML TB: Logikprogrammering, Prolog Opgave:

Lignende præsentationer


Præsentationer af emnet: "Paradigmer i Programmering 1. Plan for kurset 4 x Mads R, 4 x Torben B, 2 x opgave MR: Funktionsprogrammering, SML TB: Logikprogrammering, Prolog Opgave:"— Præsentationens transcript:

1 Paradigmer i Programmering 1

2 Plan for kurset 4 x Mads R, 4 x Torben B, 2 x opgave MR: Funktionsprogrammering, SML TB: Logikprogrammering, Prolog Opgave: løs et problem i både SML og Prolog

3 Første del: Rekursion: Hvordan løser man problemer rekursivt – i Java og SML Simple typer, lister (alternativ til array, vector i java) Højereordens funktioner – lidt ekstra kraft i parametrene når man programmerer. Datatyper – a la objekter mm

4 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 Fortolket – men med kraftig oversættelses- tids check

5 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

6 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.

7 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

8 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

9 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;

10 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 -

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

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

13 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

14 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

15 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

16 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

17 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

18 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”

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

20 Rekursion i Java public class tst{ static String blanke(int x){ if(x<=0)return ""; else return " "+blanke(x-1); } static String hjuster(String s,int w){ return blanke(w-s.length())+s; } public static void main(String[] args){ System.out.println(hjuster("goddag",8)); System.out.println(hjuster("med",8)); System.out.println(hjuster("jer",8)); }

21 Rekursion i Java static String rblanke(int x){ if(x<=0)return ""; else return " "+rblanke(x-1); } static String iblanke(int x){ String s=""; while(x>0){x--;s+=" ";} return s; }

22 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

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

24 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)

25 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)))))))))

26 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

27 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

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

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

30 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

31 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]

32 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.

33 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;

34 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. Plan for kurset 4 x Mads R, 4 x Torben B, 2 x opgave MR: Funktionsprogrammering, SML TB: Logikprogrammering, Prolog Opgave:"

Lignende præsentationer


Annoncer fra Google