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.

Slides:



Advertisements
Lignende præsentationer
Velkommen til Softwarekonstruktion
Advertisements

Indledende Programmering Uge 2 - Efterår 2006 Selektioner og interaktion mellem objekter Susanne Brix Lindros.
KONCEPT Klasser og objekter En klasse beskriver et World ArrayList
Symbolsk maskinsprog.
Datastrukturer Simple-type structs
Intro Forelæsning 2 Linux install-party lør.14.sept kl – man. 14.okt – Kursets omfang :7,5 ECTS Kursussammensætning: forelæsning.
1 Parsing. 2 Mål: Et program til indlæsning og beregning af aritmetiske udtryk Eksempel: Beregn (3*5 + 4/2) - 1 Løs et lettere problem først: Læs en streng.
Array vs. ArrayList. Arrays Et array er en struktureret metode til at gemme flere værdier af den samme datatype. Data’en i et array ligger op ad hinanden.
Grundlæggende programmering Efterår 2001
Intro Variabler - datatyper. 2. forelæsning Hvad skete sidste gang Hvad er PHP? Kursussammensætning: læse – newsgroup – forelæsning – øvelsestime – aflevering.
GP5, Martin Lillholm 1 Grundlæggende Programmering (GP) Efterår 2005 Forelæsning 5 Slides ligger på nettet. Du er velkommen til at printe dem nu. Vi begynder.
GP 10, 7/ Grundlæggende programmering Efterår 2001 Forelæsning 10 onsdag 7/ kl. 9:15 – 12:00.
FEN IntroJava AAU1 Java grundelementer Variable og datatyper Sætninger og udtryk Metoder.
Intro Forelæsning 6 Linux Install Party i PC-Cafeen i morgen.
FEN Rekursion og induktion1 Induktion og (især) rekursion Mange begreber defineres ud fra en basis og så en gentagen anvendelse af et antal regler.
Begreber og Redskaber 2 BRP.
FEN Prædikater/Seminar 11 Prædikatslogik eller Kvantificerede udtryk Prædikater udvider propositionslogikken på to måder: –Vi tillader variable.
1 Unified Expression Language Copyright © Lund & Bendsen A/S Unified Expression Language.
Paradigmer i Programmering 4. IO + oversigt over udtryk.
Anvendelser I Leg og spil.
Begreber og Redskaber 2. Plan for idag Noget om bestanddelene i et programmeringssprog Syntaksbeskrivelse af java Næste gang: –Binære tal –Repræsentation.
Intro til C# apps Kodegennemgang af simpel C# app
Begreber og Redskaber 3 BRP.
Delphi og C++ Builder C++ Builder. C++ Historie Sproget blev designet for AT&T af danskeren Bjarne Stoustrup En objektorienteret videreudvikling.
Af Ulrik, Ella-Josephine, Nikolaos og Christoffer.
Program Design – 4 Introduktion til PHP. Dagens lektion Hvad er PHP?  - og lidt historie Hvordan virker PHP? Grundlæggende PHP  Variable  Typer  Løkker.
Lektion 7 Læsestof: Kopier fra Caranno
Fundamentale datastrukturer
GP 8, 24/ Grundlæggende programmering Efterår 2001 Forelæsning 8 onsdag 24/ kl. 9:15 – 12:00.
FEN KbP/seminar 1: Specifikationer/Notationen Q 1 Kontraktbaseret programmering: Seminar 1 Om specifikationer Algoritmenotationen Q.
Ingeniørhøjskolen i Århus Slide 1 Newton approximation ”Oversæt” til algoritme - Step 5: Skriv kode - Step 4: Skriv pseudokode - Step 3: Specificér pre-
DATATYPER. For at tilpasse hvert felt i databasen til dets formål og dermed øge funktionalitet 1 bit er tilstrækkelig til at angive køn (0/1) men for.
1 Fundamentale datastrukturer. 2 Definitioner: abstrakt datatype, datastruktur Elementære datastrukturer og abstrakte datatyper : arrays, stakke, køer,
Procestræ under afvikling af cp init login shell cp cp src dest.
Paradigmer i Programmering 2. Sammensatte typer Tupler og lister Programmering med rekursion Programmering med pipe-lines Programmering med polymorfe.
Primitive typer. dIntProg, F08Typer.2 Subtyperelation for primitive typer byte ≤ short ≤ int ≤ long ≤ float ≤ double char boolean double d; int i; d =
Begreber og Redskaber 7. Plan for idag Rekursive underprogrammer Rekursive datastrukturer Rekursion vs iteration Rekursivt: Flette sortering.
8 RÅD VEDRØRENDE GOD PROGRAMMERING Effective (brown) Java.
FEN IntroJava AAU1 Klasser og objekter Grundbegreber Student-Course.
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:
Forelæsning 2.2 Tilstand og opførsel (repetition)
Paradigmer i Programmering 4. Resten af ML -Læse fra/skrive til filer -Interaktive programmer -Separat oversættelse -Parsergeneratorer.
Begreber og Redskaber 1. Plan for kurset Formål –Give et begrebsmæssigt grundlag for programudvikling, samt overblik over udvalg af redskaber og metoder.
Anvendelser I Leg og spil.
03 – Udtryk og metoder. 2 NOEA2009Java-kursus – Udtryk og metoder Udtryk i Java Java har standard udtrykene… Værditildeling Subrutiner og funktionskald.
PD – kursusgang 3 Introduktion til Java Script. Mål Viden om hvordan JavaScripts indlejres i HTML dokumenter Viden om programmering i JavaScript  Erklæring.
Opfølgning på Dygtig Skildpadde (Michael) To algoritmeskabeloner findEn findAlle Primitive typer (forfremmelse og begrænsning) Identitet versus lighed.
Paradigmer i Programmering 3. Højere ordens funktioner Idag: Højere ordens funktioner Algebraiske datatyper Næste gang: I/O, Filer, interaktive programmer.
Begreber og Redskaber 4. Plan for idag Om metoder, parametre, returværdier Et par ord om objekt-orientering Håndkøring af programmer.
Begreber og Redskaber 3. Plan for idag Om metoder, parametre, returværdier Overblik over klasser,objekter,nedarvning Et par ord om objekt-orientering.
Quiz 3.1. Quiz 1 – Assignment dIntProg, E14 Hvad er værdierne af x og y efter udførelse af følgende program? 1.x er 6, y er 3 2.x er 8, y er 5 3.x er.
Søgning.  Michael E. Caspersen, 2000Introducerende objektorienteret programmeringSøgning.2 Søgeproblemer... Søgning efter fil(er) Søgning i databaser.
DAIMIIntroducerende objektorienteret programmering4B.1 Typer og tilstand i Java Typer, tilstand, erklæring, variable, primitive datatyper, reference- og.
(let ((title ’(Scheme Macros)) title) Syntaktiske transformationer og en masse parenteser.
Klasser og objekter. dIntProg, E08Klasser og objekter.2 Grundbegreber Klasser og objekter –beskrivelse –oprettelse Attributter og metoder –tilstand –opførsel.
DAIMIIntroducerende objektorienteret programmering3B.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
DAIMIIntroducerende objektorienteret programmeringkd.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
DAIMIIntroducerende objektorienteret programmering4B.1 Grundlæggende og Reference Typer i Java Typer, tilstand, erklæring, reference- og værdi semantik,
 Jens Bennedsen 2001Multimedie programmering3A.1 Definition af klasser Klasseskelet, metoder, et eksempel: dato.
Multiple processer på web-site Web- server filer Kunde 1 Kunde 2 Kunde p1p2p internet.
Paradigmer i Programmering 0. Plan for kurset 4 x Mads R, 4 x Torben B, 2 x opgave MR: Funktionsprogrammering, SML TB: Logikprogrammering, Prolog Opgave:
Programmering I Java/C# Datatekniker Dit første projekt.
Forelæsning Uge 2 – Torsdag Java syntax og style guide Sætninger –Simple sætninger (assignment, interne og eksterne metodekald) –Sammensatte sætninger.
Algoritmeskabeloner findOne, findAll, findNoOf, findSumOf Primitive typer (forfremmelse og begrænsning) Identitet versus lighed (for objekter, herunder.
Forelæsning Uge 2 – Torsdag
Forelæsning Uge 4 – Mandag
Forelæsning Uge 4 – Mandag
Studiepraktik Thomas Bøgholm Mikkel Hansen Jacob Elefsen
Programmering.
Forelæsning Uge 4 – Torsdag
Præsentationens transcript:

Paradigmer i Programmering 1

Program for idag : Funktioner og udtryk i SML : Øvelse : Frokost – 14.00: Deklarative sprog – 15.15: Oversigt over SML

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

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

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.

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

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

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;

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 -

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

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

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

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

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

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

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

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”

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 -

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

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

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)

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

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

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

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

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

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

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 [4,5,6]

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.

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;

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