Datalogi 0 GA Forelæsning 1 2 1. september 2003 Nils Andersen Datamatiske principper EDB som simulering Programmering Problemløsning Tilstandsorienteret Værdiorienteret (= funktionsorienteret) Administrative oplysninger Standard ML Funktioner (matematik >< datalogi) Typer 1
Data (Edb-ordbog, Dansk Standard 2049-1970): En formaliseret repræsentation af kendsgerninger eller forestillinger på en sådan form, at den kan kommunikeres eller omformes ved en eller anden proces. Analoge data >< digitale data ord af positioner med tegn fra et alfabet alfabet = {O, I, U}, ord = IOOUII Data beror på konvention; har både syntaks (form) og semantik (betydning). R A T da. eng. ty. 2
Datalogi? Datalogi EDB Informatik IT (informationsteknologi) IKT Kybernetik Computer science Computing Omverden Tanke fænomen begreb Virkelighed Information Kode symbol Data Databehandling 3
Simulering gammel virkelighed ny analyse og måling modellering repræsentation indgangsfænomen information indgangsoplysninger resultater udgangsfænomen brug indsigt tolkning inddata data uddata dataproces 4
Symbolbehandling Med symboler kan man Sende information (brev, telegram,... ) Gemme information (indskrift, dokument,... ) Behandle information (regneskema) Kalkule: 2 2 1 : 8 = 2 7 rest 5 1 6 ----- 6 1 5 6 --- 5 Regnemaskine: Blaise Pascal 1642 pascaline (addition, subtraktion) Computer/datamaskine/datamat: Fuldautomatisk; kan simulere enhver symbolbehandlingsoperation. (Beregning + styring) 5
Universel datamat Enhver dataproces kan eftergøres blot programmet vælges passende. Program Inddata Processor Uddata Regneenhed i forbindelse med et lager det imperative (tilstandsorienterede) programmeringsparadigme. Programmer er også data. John von Neumann: Program- og datalager kombineres; programmer kan frembringes som data. John McCarthy: regneoperationer udvides (med omflytningsoperationer som i Alonzo Church λ-kalkule) det applikative (funktions- eller værdiorienterede) programmeringsparadigme. 6
Organisation Datalogi 0 GA forelæsninger Nils Andersen Julia Lawall øvelser 11 hold 6 instruktorer Fra i dag kl. 13! Holdfordeling ved opslag Bøger M.R. Hansen & H. Rischel: Standard ML Introduction to Kursusbogen bind 1 Generelle oplysninger bind 2 Vejledning i brug af DIKUs EDBsystem bind 3 Laboratorieøvelser bind 4 Noter bind 5 Uddrag af L.C. Paulson: ML for the Working Programmer, 2nd edition 7
Øvelser Skaf jer (dvs. hent) jeres UNIX-brugernummer Prøv at gå på nettet (med netscape eller opera); find hjemmesiden for Datalogi 0 GA: http://www.diku.dk/undervisning/2003e/dat0ga/ Prøv mosml I det omfang, der er tid: Regn følgende opgaver: HR opg. 1.1 KB4 opg. 3.2, 3.3 De supplerende opgaver på næste side. Til særligt interesserede: Løs KB4 opg. 3.3 (for signum : int -> int) og supplerende opgave 3 og 4 med ren heltalsaritmetik, det vil sige under anvendelse af +, -, *, div, mod og abs, men uden brug af værdier af type real, uden brug af if...then...else... og uden brug af ordningsrelationerne <, <=, > eller >=. 8
Opgaver til uge 36 Hansen & Rischel: Opgave 1.1 Kursusbogens bind 4: Opgave 3.2 og 3.3 Supplerende opgaver: 1. Skriv den funktion af type int -> bool, som ud fra en persons alder afgør, om personen har stemmeret. 2. Skriv den funktion af type real -> real, som ud fra en anvist løn beregner den udbetalte løn, når fradraget er 2312 og trækprocenten er 48 (se bort fra arbejdsmarkedsbidrag o.lign.). 3. Skriv den funktion af type int -> int, som for antallet af deltagere på et kursus beregner, hvor mange øvelseshold der skal oprettes, når antallet af hold skal være mindst muligt, men der højst må være 25 på hvert hold. 4. Det er gratis at ringe til telefonnumre, hvis to første (af de otte) cifre er 80. Skriv en funktion af type int -> bool, der undersøger, om det er gratis at ringe til det opgivne nummer. 9
Opgaver til uge 37 Særligt vigtige opgaver er fremhævet med fed skrift. Opgaver til skriftlig aflevering er skrevet med kursiv. Hansen & Rischel: Opgave 2.2, 2.6, 2.7, 2.8, 2.9 Kursusbogens bind 4: Opgave 4.1, 4.2, 4.3, 4.4 For særligt interesserede: Løs kursusbogens opgave 4.4 på følgende måde: Skriv først en funktion, der løser opgaven, når a b c. Brug derefter denne funktion som hjælpefunktion ved løsning af opgaven i det generelle tilfælde. Løs desuden opgave 4.6 i kursusbogens bind 4. 10
Begrundelser Hvorfor værdiorienteret programmering? Færre og enklere grundbegreber Lettere at ræsonnere om programmerne Ortogonalt: Tillader vilkårlige kombinationer Tillader abstraktioner på ethvert niveau Hvorfor stærkt typesystem? Mere informative fejlmeldinger Lettere at få programmer korrekte Hvorfor Standard ML? Værdiorienteret Stærkt typesystem Usædvanlig veldefineret Gode implementeringer Gratis Ikke særlig udbredt Uinteressant grænseflade (tekst ind/tekst ud)? Bruges ikke i praksis? Kører langsomt 11
Eksempel på kørsel grerr > mosml Moscow ML version 2.00 (June 2000) Enter quit(); to quit. - 3 + 5; > val it = 8 : int - it div 2; > val it = 4 : int - val moms = 0.25; > val moms = 0.25 : real - round (~27.8); > val it = ~28 : int - fun pris (oere) = oere + round (real (oere) * moms); > val pris = fn : int -> int - pris (30000); > val it = 37500 : int - quit(); grerr > 12
Funktioner matematik En funktionel relation. 2 4 1 2 0 0 1 2 2. 4 Total, når ikke andet er præciseret datalogi En beregningsforskrift fun f n = n + n; fun g n = 2 * n; Her regnes f og g for forskellige (og funktioner kan i øvrigt ikke sammenlignes med = eller <>) Partiel, når ikke andet er præciseret 13
Simple typer ~ abs + - * div mod int ceil floor round trunc real + - * / real ~ abs < = > <= >= <> < = > <= >= <> = <> chr ordsize bool not < = > <= >= <> < = > <= >= <> ^ char str string Se KB4 side 51. 14
Gruppering Parenteser grupperer, men har ikke noget at gøre med funktionskald. Man kan valgfrit skrive f(x) eller f x eller endda (f)(x) eller (f)x men helt uden nogen form for adskillelse fx opfattes det som et nyt værdinavn. Hvis argumentet er sammensat, må det sættes i parentes: fun pris oere = round (real oere * moms) + oere; for funktionsanvendelse binder stærkere end nogen operator. Højresiden betyder derfor (round ((real oere) * moms)) + oere svarende til udtrykstræet real oere round * + moms oere 15
Associeringsretning og prioritet Grupperingsregler for udtryk med flere operatorer: Ved flere forekomster af samme operator bestemmes grupperingen af dens associeringsretning. De fleste operatorer associerer fra venstre: a - b - c - d betyder ((a - b) - c) - d. (I SML tre vigtige undtagelser: ::, @ og -> associerer fra højre.) Blandes flere forskellige operatorer, er deres prioritet afgørende (i SML et tal 0, 1,..., 9): 7: *, /, div, mod 6: +, -, ^ 5: ::, @ 4: =, <>, <, <=, >, >= 3: :=, o 0: before højere prioritetstal binder stærkere. 16