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

4 Example exam questions

Uppgiftssamling 5B1493, lektionerna 1 6. Lektion 1

SF1625 Envariabelanalys

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

Intro. Vad är en monad?

abbcba a) A regular expression over

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

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

Induktion LCB 2000/2001

Ett förspel till Z -transformen Fibonaccitalen

INNEHALL t.3

Funktionell programmering DD1361

Uppsala Universitet Matematiska Institutionen T Erlandsson

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

Sidor i boken

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

Mat Grundkurs i matematik 1, del III

Tentamen i Databasteknik

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

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

LINJÄR ALGEBRA II LEKTION 1

C100-LED Duschhörn med LED-Belysning

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

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

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

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

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

Reliability analysis in engineering applications

Övning 1 - Abstrakta datatyper

CD5560 FORMELLA SPRÅK, AUTOMATER, OCH BERÄKNINGSTEORI, 5 p 10 AUGUSTI 2007 LÖSNINGAR

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

Grundläggande textanalys, VT2012

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

Sammanfattning, Dag 9

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.

TATA42: Föreläsning 4 Generaliserade integraler

Preschool Kindergarten

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

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

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

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

#minlandsbygd. Landsbygden lever på Instagram. Kul bild! I keep chickens too. They re brilliant.

Gör slag i saken! Frank Bach

Schenker Privpak AB Telefon VAT Nr. SE Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr Säte: Borås

Dugga Datastrukturer (DAT036)

DD1361 Programmeringsparadigm. Carina Edlund

24 Integraler av masstyp

Innovation GAT med guldkant

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

Finaltävling den 20 november 2010

Webbaserad applikation för administrering av investeringar

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?

AUBER 95 9 jan LÖSNINGAR STEG 1:

Vässa kraven och förbättra samarbetet med hjälp av Behaviour Driven Development Anna Fallqvist Eriksson

Föreläsning 13. In- och utmatning

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

Guide - Hur du gör din ansökan

TATA42: Föreläsning 4 Generaliserade integraler

Writing with context. Att skriva med sammanhang

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

Discovering!!!!! Swedish ÅÄÖ. EPISODE 6 Norrlänningar and numbers Misi.se

Omprov 11/11. på förmiddagen.

Symmetriska komponenter, Enlinjediagram och Kortslutningsberäkningar

LÖSNINGSFÖRSLAG TENTAMEN PROGRAMMERING I ETT FUNKTIONELLT SPRÅK ML, 5P

Isometries of the plane

Grundläggande datalogi - Övning 1

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

"Referentiell transparens"

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

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

Föreläsning 7: Filer

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

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

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

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

Komplexa tal. j 2 = 1

Kan det vara möjligt att med endast

EasyMP Multi PC Projection-bruksanvisning

BOENDEFORMENS BETYDELSE FÖR ASYLSÖKANDES INTEGRATION Lina Sandström

Ordlistor, filhantering och ut på webben. Linda Mannila

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

Diskreta stokastiska variabler

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

printenv sort pager printenv grep args sort pager

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

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion

Libers språklåda i engelska 7 9: Listening

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

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

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

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

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: import Hugs.Observe -- Ej stndrdmodul qsort [] = [] qsort (x : xs) = qsort [(observe e e) e<-xs, e<x] ++ [(observe x x)] ++ qsort [(observe e2 e) e<-xs, e>=x] QS> hed (qsort [4, 5, 4, 3,, 2,9]) >>>>>>> Observtions <<<<<< e 3 2 2 x QS> 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 { ih <- openfile "input.txt" 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 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: vis :: String -> -> vis s x = unsfeperformio (putstrlns s >> return x) Test progrmmet WC> wc 0 0 hubb ^D WC> min hubb ^D 6 WC> I terminlen: $ ghc -o minwc minwc.hs $./minwc hubb bubb ^D 2 2 $ Hskell i verkligheten Dt.BteString för strängr: bte/bokstv istället för c 2 bte/bokstv Dt.Mp för ssocitiv lisr Opertioner är O(log n). Dt.Arr, en oföränderlig rr Vnlig (?) Arr som mond: Dt.Arr.ST Mps give us the sme cpbilities s hsh tbles do in other lnguges. Internll, mp is implemented s blnced binr tree. Compred hsh tble, this is much more efficient representtion in lnguge with immutble dt. This is the most visible exmple of how deepl pure functionl progrmming ffects how we write code: we choose dt structures nd lgorithms tht we cn express clenl nd tht perform efficientl, but our choices for specific tsks re often different their counterprts in impertive lnguges Näst gång Sntxnls (KS Hskell 26/0) Från Rel World Hskell