Senast. Idag. Strikt evaluering. Icke-strikt evaluering. Vad händer här? Lat evaluering. Testa latheten! Testa latheten!



Relevanta dokument
Senast. Idag. Strikt evaluering. Icke-strikt evaluering. Vad händer här? Lat evaluering. Testa latheten! Testa latheten!

Senast. Idag. Icke-strikt evaluering. Strikt evaluering. Testa latheten! Lat evaluering. Plus och minus med lat evaluering. Testa latheten!

Listor = generaliserade strängar. Introduktion till programmering SMD180. Föreläsning 8: Listor. Fler listor. Listindexering.

Belöningsbaserad inlärning. Reinforcement Learning. Inlärningssituationen Belöningens roll Förenklande antaganden Centrala begrepp

Sammanfattning. Listor. List-manipulering. Matris. /home/lindahlm/activity-phd/teaching/11dd1310/exercise3/exercise3.py September 13, 20111

Operativsystemets uppgifter. Föreläsning 6 Operativsystem. Skydd, allmänt. Operativsystem, historik

Introduktion till Haskell

Integralen. f(x) dx exakt utan man får nöja sig med att beräkna

SF1625 Envariabelanalys

Induktion LCB 2000/2001

Ett förspel till Z -transformen Fibonaccitalen

Intro. Vad är en monad?

Men först: Några funktioner ur preluden. Introduktion till programmering. Uppgiften. Variationer av uppgiften. Föreläsning 4

Uppgiftssamling 5B1493, lektionerna 1 6. Lektion 1

SF1625 Envariabelanalys

Funktionell programmering DD1361

SPEL OM PENGAR FÖR - EN FRÅGA FÖR SKOLAN? VERKTYG, ÖVNINGAR OCH KUNSKAPSBANK FÖR ARBETE MED SPEL OM PENGAR I SKOLAN

Välkomna till DIT012 IPGO. Tyvärr en bug i Google Docs: Sidnummer stämmer inte alltid. Alla anteckningar börjar på sidan 1.

Uppsala Universitet Matematiska Institutionen T Erlandsson

Mat Grundkurs i matematik 1, del III

Tentamen i Databasteknik

Skapa uppmärksamhet och få fler besökare till din monter!

LINJÄR ALGEBRA II LEKTION 1

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

Sidor i boken

Tentamen Programmeringsteknik II Skrivtid: Skriv läsligt! Använd inte rödpenna! Skriv bara på framsidan av varje papper.

0 a. a -Â n 2 p n. beskriver på sedvanligt sätt en a-periodisk utvidgning av f. Nedanför ritas en partialsumma av Fourierserien.

C100-LED Duschhörn med LED-Belysning

awk, sed och grep awk döpt efter Aho Weinberger Kernighan (1977) sed en stream editor grep sed g/re/p bygger i viss mån på ed line editor

Reliability analysis in engineering applications

Så här gör du? Innehåll

Analys grundkurs B lab 1. Stefan Gustafsson Per Jönsson Fakulteten för Teknik och Samhälle, 2013

Olika shell. Skalprogrammering. Pipor och omdirigering av strömmar

TATA42: Föreläsning 4 Generaliserade integraler

Finita automater, reguljära uttryck och prefixträd. Upplägg. Finita automater. Finita automater. Olika finita automater.

awk, sed och grep ed kommandon grep Standard unix editor tidig 70-tal program < 8Kbyte awk döpt efter Aho Weinberger Kernighan (1977)

Gör slag i saken! Frank Bach

INNEHALL t.3

Finaltävling den 20 november 2010

Integraler. 1 Inledning. 2 Beräkningsmetoder. CTH/GU LABORATION 2 MVE /2013 Matematiska vetenskaper

Symmetriska komponenter, Enlinjediagram och Kortslutningsberäkningar

Övning 1 - Abstrakta datatyper

Guide - Hur du gör din ansökan

Föreläsning 13. In- och utmatning

Lamellgardin. Nordic Light Luxor INSTALLATION - MANÖVRERING - RENGÖRING

TATA42: Föreläsning 4 Generaliserade integraler

Innovation GAT med guldkant

Omprov 11/11. på förmiddagen.

Sammanfattning, Dag 9

6 Formella språk. Matematik för språkteknologer (5LN445) UPPSALA UNIVERSITET

Dugga Datastrukturer (DAT036)

Grundläggande datalogi - Övning 1

Föreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk

Grafisk Profil. Välkommen in i Korvpojkarnas grafiska värld.

Från fotbollsplan till affärsplan. Berättelsen om Newbody

24 Integraler av masstyp

Föreläsning 10 Datalogi 1 DA2001. Utskrift på skärmen. Syntax. print( Hej ) Hur är det? Hej. print( Hej,end= ) print( Hur är det? ) HejHur är det?

Föreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt

EasyMP Multi PC Projection-bruksanvisning

Kan det vara möjligt att med endast

Föreläsning 2 Programmeringsteknik och Matlab DD1312. Programspråk. Utskrift på skärmen

Föreläsning 4: Filer och strömmar

Diskreta stokastiska variabler

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.

Introduktion till programmering SMD180. Föreläsning 7: Strängar

"Referentiell transparens"

Webbaserad applikation för administrering av investeringar

Hur man programmerar. Exempel på problemlösning i Python

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

============================================================ V1. Intervallet [a,b] är ändligt, dvs gränserna a, b är reella tal och INTE.

Strängar. TDDD64 Programmering i Python Föreläsning 4. Peter Dalenius Institutionen för datavetenskap

Föreläsning 7: Filer

Färgsättning. Man kan även trycka i solida färger, då används PMS koden. T ex när man trycker på kläder eller ska brodera logon på tyg.

Del6 Strömmar Ämnesområden denna föreläsning:

BLÖTA BOKEN MONTERINGSANVISNING PALLADIUM DE LUXE PLUS VIKDÖRR I NISCH VIKTIG INFORMATION. LÄS DETTA INNAN MONTERINGEN PÅBÖRJAS.

Kurskod: TAMS11 Provkod: TENB 12 June 2014, 14:00-18:00. English Version

Introduktion till programmering. Standardfunktioner. Vad används datorer till? Standardfunktioner. Föreläsning 2. Prelude. $ ghci...

Grundläggande matematisk statistik

V1. Intervallet [a,b] är ändligt, dvs gränserna a, b är reella tal och INTE ±. är begränsad i intervallet [a,b].

Kontinuerliga variabler

Lösningsförslag till tentamen i SF1683 och SF1629 (del 1) 23 oktober 2017

Parsing med Recursive Descent, Avbildningsklasser. Syntaxdiagram. Syntaxdiagram och kodning expression. Betrakta följande uttryck

VECKANS LILLA POSTKODVINST á kronor Inom nedanstående postkoder vinner följande 172 lottnummer kronor vardera:

Datalogi för E Övning 3

AUBER 95 9 jan LÖSNINGAR STEG 1:

Programmeringsguide ipfg 1.6

Omkoppling av in- och utmatning. In- och utmatning i Unix. Kommando exempel, ls, pipe forts. Kommando exempel, ls, pipe

PASS 1. RÄKNEOPERATIONER MED DECIMALTAL OCH BRÅKTAL

Tillämpning - Ray Tracing och Bézier Ytor. TANA09 Föreläsning 3. Icke-Linjära Ekvationer. Ekvationslösning. Tillämpning.

Uppsala Universitet Matematiska Institutionen Bo Styf. Sammanfattning av föreläsningarna 5-7.

4 Example exam questions

Föreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk

Föreläsning 7. Splay-träd. Prioritetsköer och heapar. Union/Find TDDC70/91: DALG. Innehåll. Innehåll. 1 Splay-träd

Unix design. Unix är ett operativsystem från mellan 1969 och 1972, beroende på hur man räknar. Unix utvecklas fortfarande.


Föreläsning 5 Programmeringsteknik DD1310. Modulen doctest. Exempel. Doctest Dictionary Filhantering

DD1361 Programmeringsparadigm. Carina Edlund

NATIONELLT KURSPROV I MATEMATIK KURS C VÅREN Del I, 10 uppgifter utan miniräknare 4. Del II, 8 uppgifter med miniräknare 6

Ordlistor, filhantering och ut på webben. Linda Mannila

Associativa lagen för multiplikation: (ab)c = a(bc). Kommutativa lagen för multiplikation: ab = ba.

Transkript:

Senst Idg Högre ordningens funktioner Lismfttning Strikthet och lt evluering Strömmr I/O i Hskell Strikt evluering Icke-strikt evluering Def: Strikt evluering innebär tt ll prmetrrs värde är känd när en operr eller funktion nrops. Ex: Funktionsnrop i Jv, C, etc Hur beräkns if jobbigt(7) && tungt(47) then? Vnligen: Mn kortsluter jämförelsen. Implementers för nd och or Vd händer här? int min(int rgc, chr** rgv) { if (hej() hopp()) { printf("du glde\n"); else { printf("nix pix!\n"); int hej() { printf("hej "); return ; Lt evluering Hur beräkns hed [..0]? hed (qsort longlist)? Lt evluering i Hskell: Beräkn br det som behövs Vrje uttrck lgrs som ett löfte om evluering vid behov. int hopp() { printf("hopp "); return ; Test ltheten! Test ltheten! Vd händer med hed (qsort [4,5,4,,2,9])? Instrumenter koden: qsort [] = [] qsort (x : xs) = qsort [(observe e e) e<-xs, e<x] ++ [(observe x x)] ++ qsort [(observe e2 e) e<-xs, e>=x] Hugs> hed (qsort [4, 5, 4, 3,, 2,9]) >>>>>>> Observtions <<<<<< e 3 2 2 x Hugs> Ing värden på e2 det uttrcket hr ldrig behövt evluers

Plus och minus med lt evluering Vlfri strikthet Nckdelr: Fördelr: Kn slö ner ett progrm (nvänd då explicit strikt evluering!) Kn slös på minne: löftet tr plts Överrsknde för den ovetnde? Kn snbb upp ett progrm Undviker onödig beräkningr. Aumtiskt! Erbjuder smrt uttrckssätt. Operrn ($!). Ersätt f x med f $! x tvingr x tt evluers först. Funktionen seq :: -> b -> b let x = fkn = fkn2 in seq fkn3 x Anpssde funktioner, exv foldl. Strikt dttper, exv dt StrictColor = SRGB!r!g!b lgrr ing löften Strömmr: nvänd lt evluering Vd händer med ones = ( : ones)? Hugs> ones [ tke 0 ones? Hugs> tke 0 ones [,,,,,,,,,] ex = ( : mp ((+) ) ex)? Hugs> tke 0 ex [,2,3,4,5,6,7,8,9,0] Inbggt i Hskell: [..] == ex Mer exempel ex2 = conct (mp (\x -> [x,-x]) ex) Hugs> tke 0 ex2 [,-,2,-2,3,-3,4,-4,5,-5] Hur t frm ll tl-pr? llpirs = [(x, ) x <- [..], <- [x, (x-)..]] Hugs> tke 0 llpirs [(,),(2,2),(2,),(3,3),(3,2),(3,), (4,4),(4,3),(4,2),(4,)] Strömmr: Oändlig lisr Tpexemplet: Fibonccitlen Antg tt fibs är listn v Fibonccitl. 2 3 5 8 3 2 fibs + 2 3 5 8 3 2 34 til fibs 2 3 5 8 3 2 34 55 til(til fibs) fibs = ::(elementwiseadd fibs (til fibs)) where elementwiseadd = zipwith (+) Hugs> tke 0 fibs [,,2,3,5,8,3,2,34,55] Pseudoslumptl i Hskell Ett sätt tt generer pseudoslumptl: Ström v pseudoslumptl: Måste skicks med överllt. module MinSimulr where import Rndom prng :: Int -> Int -> [Int] prng n seed = rndomrs (0,n-) (mkstdgen seed) Hugs> :lod MinSimulr Hugs> tke 0 (prng 00 47) [37,92,38,24,22,60,2,24,38,6] Hugs> runsimultion strt (prng 00 47) Strömmr i Unix Strömmr och pipes i Unix Antg du snbbt måste rder mång filer: $ rm -r MinHemligMP3 rm: remove write-protected file finl_countdown.mp3? rm: remove write-protected file BestOf80s.zip? rm: remove write-protected file trckslistn85.zip? Två tips:. Använd rm -rf! 2. eller nvänd es $ es rm -r MinHemligMP3 stdin, stdout, stderr är lltid (?) definierde och öppn. God vn tt lltid läs från stdin skriv till stdout, och skriv felmeddelnden till stderr. Str om med < och > $ sort < infilen > utfilen Koppl ihop stdout och stdin med $ ct infilen sort > utfilen

$ es Vd gör es? tills mottgnde progrmmet vsluts och strömmen stängs. Minns: $ es rm -r MinHemligMP3 Lthet med hjälp v I/O-buffertr! Knuths lösning Elegnt progrmmering Elegnt specildesignd dtstruktur (prefixträd) Noggrnt kommentert och presentert Kritikern, Doug McIlro, AT&T Bell Lbs: Ver few people cn obtin the virtuoso services of Knuth [] ttck problems such s Bentle s from the ground up. But old Unix hnds knows instinctivel how solve this one in jiff. (McIlro uppfnn pipes i Unix.) Strömmr som prdigm Kräver nån sorts lthet Uttrcksfullt, snggt God ingenjörskonst! Läs från stdin Skriv till stdout Felmeddelnden till stderr Progrmming perls Klssisk rtikelserie i Communictions of the ACM, Jon Bentle. Idé: Låt en stjärn lös ett problem och låt en nnn stjärn kritiser lösningen. 986: Given text file nd n integer k, ou re print the k most common words in the file (nd the number of occurrences) in decresing frequenc. Donld Knuth fick uppdrget. McIlros lösning: strömmr i Unix $ ct MittLitterärVerk.txt tr -cs A-Z-z ˆj # Rdbrtningr tr A-Z -z # Versler blir gemen sort # Sorter orden uniq -c # Sml ihop och räkn sort -rn # Sorter efter ntl hed -n 0 # Vis de först 0 Looking bck ll tht hs occurred me since tht eventful d, I m scrcel ble believe in the relit of m dventures. The were trul so wonderful tht Looking bck ll tht looking bck ll tht Looking bck ll tht looking bck ll tht Problemet med I/O I/O ej funktionellt getchr plockr bort ett tecken från en 885 nån buffert 3 bndon putchr skriver in ett tecken 4 bndoned i en buffert. bndoning Hur åstdkomm I/O utn sideffekter? bbeville 885 Lisp mfl: Fusk! Använd 5834 sidoeffekter. the 3 bndon 3634 of 4 bndoned 2579 bndoning 2323 nd bbeville 2098 i I/O i Hskell Pseudokod: min = printstr("rev: ") printstr(reverse(getline)) I impertivt progrm: Ordning och direkt tillgång till omvärlden. I Hskell: Ordning oklr, ll funktioner hr värden, tillåter ej sidoeffekter.. Lt I/O: Låtss läs in llt i börjn. 2. Mondisk I/O: Kpsl in världen på ett säkert sätt Speciell nottion för I/O.

interct: en god Unix-medborgre interct: en god Unix-medborgre interct :: (String -> String) -> IO () import Dt.Chr min = interct (mp Upper) Läs från stdin Skriv till stdout Vd gör dett? module Min where import Dt.List min = interct (conct. sort. lines) interct: en god Unix-medborgre De 0 vnligste orden Vd gör dett? module Min where import Dt.List newline str = str ++ "\n" min = interct (newline. show. length. words) module Min where import Dt.List (sortb, sort, group) import Dt.Chr (Lower) countelems = mp (\x -> (hed x, length x)) sortbsnd = sortb (\x -> snd compre snd x) lower = mp Lower rnkwords = sortbsnd. countelems. group. sort. words. lower formtoutput = unlines. mp (\(str, i) -> str ++ "\t" ++ show i) min = interct (formtoutput. (tke 0). rnkwords) Mondisk I/O Designprincip för I/O i Hskell Särskild nottion som döljer problemen Monder: funktionellt idiom för sekvensiell beroenden tt dölj prmetrr förenkl kod Världen Mondisk IO Din kod Filer getchr mpreprtions Portr getline computeitall stdin/stdout openfile mfilter Grfik redfile iseof m.m. Ansts: Kpsl in världen Till versler igen Vd vi vill h: tpe IO = World -> (, World) IO-tper är hndlingr: Eng: ctions Exempel: getchr :: IO Chr getchr :: World -> (Chr, World) putchr :: Chr -> IO () putchr :: Chr -> World -> ((), World) iseof getline :: IO Bool :: IO String Låtss läs hel filen: module Min where import Dt.Chr min = do { str <- getcontents; putstrln (mp Upper str);

Räkn ord igen Lt I/O: räkn ord i fil module Min where min =do { input <- getcontents; ws <- return (length (words input)); putstrln (show ws); module Min where min = do { ih <- openfile "input.txt" RedMode; ws <- return (length (words input)); putstrln(show ws); hclose(ih) Två n operrer i mondisk I/O <- plockr ut ett värde från IO-monden. Kn skicks till ren funktioner utn IO-signtur. return betder sätt in ett värde i IO-monden. return A skpr värde v tpen IO Chr. Viktigt: return vslutr ej ett do-uttrck! Lt I/O: räkn ord i given fil Förenkl koden min = do { ih <- openfile "input.txt" RedMode; ws <- return (length (words input)); putstrln(show ws); hclose(ih) blir min = do { rgs <- getargs; ih <- openfile (hed rgs) RedMode; putstrln (show (length (words input))); hclose(ih); Lt I/O frligt, vrför? module Min where import Sstem.Environment (getargs) min = do { rgs <- getargs; ih <- openfile (hed rgs) RedMode; putstrln(show (length (words input))); hclose(ih); min = do { ih <- openfile "input.txt" RedMode; hclose(ih); putstrln(show (length (words input))); Egen kod i IO-monden: getline Exempel: Räkn rder och tecken getline :: IO [Chr] getline = do { c <- getchr; if c == \n then return [] else do { cs <- getline; return (c : cs) Pketer resulttet med return Indt: Läs från stdin Utdt: Skriv ntlet rder och tecken till stdout module Min where min = do {(nlines, nchrs) <- wc 0 0; putstrln (show nlines ++ "\t" ++ show nchrs)

Exempel: Räkn tecken och rder wc :: Int -> Int -> IO (Int, Int) wc nlines nchrs= do flg <- iseof if flg then return (nlines, nchrs) else consumeandcount nlines nchrs consumeandcount :: Int -> Int -> IO (Int, Int) consumeandcount nl nc = do { c <- getchr; if (c == \n ) then wc ( + nl) ( + nc) else wc nl (+nc) Lur Hskell med unsfeperformio Hugs> wc 0 0 hubb ^D Hugs> min hubb ^D 6 Hugs> I terminlen: $ runhugs wc.hs hubb bubb ^D 2 2 $ Test progrmmet Näst gång Ett trick för tt komm runt mondreglern: unsfeperformio :: IO -> Använd inte för F4 eller på tent Pen-Jones: Riktigt obekväm I/O, Once-per-run I/O Debugging: trce :: String -> -> trce s x = unsfeperformio (putstrlns s >> return x) men vi hr ju Hugs.Observe! Mer om monder Korrekthet i progrm