Föreläsning 6 i programmeringsparadigm. Tips kring programmering i Haskell och kring labbarna.
|
|
- Sandra Lundqvist
- för 5 år sedan
- Visningar:
Transkript
1 Föreläsning 6 i programmeringsparadigm. Tips kring programmering i Haskell och kring labbarna. Att arbeta med två fönster. Hugs är ju en tolk (interpreter) vilket har stora fördelar vid programutveckling. Man kan ju efter en inledande inladdning till Hugs med :l fortsätta med att göra :r när man gör någon ändring i filen med Haskellkod (spara först!). I Hugs kan man sedan skriva olika uttryck och göra små experiment med sina definierade funktioner och se vad funktionerna får för resultat med olika (enkla) argument. För att få information om något namn som man definierat eller som definierats i preluden, t ex en funktions typ, kan man göra :i <namn> eller : info <namn>: Prelude> :i length length :: [a] -> Int Man kan också helt enkelt skriva funktionsnamnet som ett uttryck (en funktion är ju ett värde, och ett värde är det enklaste formen av uttryck): Prelude> length ERROR - Cannot find "show" function for: *** Expression : length *** Of type : [a] -> Int Värdet skrivs inte ut då funktioner inte ingår i typklassen Show, varför någon funktionen show inte finns för funktionsvärden. Man kan också använda :t (eller :type ) : Prelude> :t length length :: [a] -> Int Att själv skriva typer: Jag rekommenderar att när man skall skriva t ex en ny funktion först tänka ut typen och skriva in den i Haskell-texten, trots att det i regel egentligen inte behövs då Haskell själv härleder typen. Sedan definierar man funktionen / värdet. Protesterar Haskell, t ex om är typen för generell eller om man får något annat typfel, kan man kommentera bort typuttrycket (med en-raders-kommentar : --, OBS mellanslag efter -- ) och försöka igen. Går det bra kollar man vad Haskell föreslår för typ. Sedan tänker man. Observera: I definitioner med flera ekvationer att Haskell bestämmer sig för typen i första ekvationen om man inte typar själv. Hittar hugs en annan typ i andra ekvationer blir det fel. Typiskt är att man stirrar på ekvationen för det rekursiva fallet, och inte kan finna något fel, pga att man skrivit basfallet först med något trivialt fel. Flerraders-kommentarer skivs med {- -}.
2 Krånglig funktion: Definiera en hjälpfunktion! Om vikten av att definiera funktionerna för hela definitionsområdet: Hugs kollar inte att man definierat en funktion så att alla tänkbara argument "matchar" någon ekvation. Glömda fall resulterar i körfel. Till exempel : f :: Int -> Int Körning: Main> f 14 f 14 = 2 2 Bättre definiton: Main> f 3 Program error: {f 3} f :: Int -> Int f 14 = 2 f i = error ("f " ++ show i ++ " odefinierat") Det är ofta bra att som sista ekvation skriva ett sköns-fall, default-fall, som alltid "matchar", t ex när man håller på med legalmove för ADT Chessman: legalmove = legalmove = error "Inte implementerat än i legalmove" När man tycker man är klar kan man byta texten till "Inträffar aldrig i legalmove". Inträffar det i alla fall har man tänkt fel. När man t ex skriver chessquaretographics:: Square -> Chessman -> [Graphic] i steg tre är det viktigt att komma ihåg NoChessman. Hur skriver man en lista med ett enda element (kan vara basfall ibland)? Det finns två sätt: [1] eller 1 :[] är en [Int] med ett enda element med värdet 1. Båda sätten [x] eller (bättre tycker jag) (x :[]) fungerar också i möster ("patterns"). Funktionen concat i steg 6. I steg 6 får man lätt typen[[graphics]] (64 element i listan där elementen består av listor med bilden av en ruta och ibland också bilden av en schackpjäs). I stället vill man ha [Graphics]. Att "platta till" listan gör man med en funktion: concat concat [] :: [[a]] -> [a] = [] concat (x:xs) = x ++ concat xs -- finns förstås färdig i Prelude.
3 Innehållet i en ADT. Ex i steg 6. En förfrågan : Jag och min labbkompis håller på och kämpar med schacket och har kommit till steg 6, d.v.s vi håller på och implementerar funktionen chesstographics() och har stött på lite patrull. Frågan är hur man fiskar ur (Square, Chessman)-paren från Chess-typen Chess [(Square, Chessman)]? Vi har satsat på att, precis som du tipsar om i kompendiet, att mappa listan i Chess mot chessquaretographics() funktionen via en hjälpfunktion. Problemet är att vi lyckas inte få typerna att matcha. Detta är vår ansats till lösning, som vi tycker ligger närmast till hands: Creates a Graphic list for the chessboard. chesstographics :: Chess -> [Graphic] chesstographics chess = map helper chess helper :: (Square, Chessman) -> [Graphic] helper (sq, cman) = chessquaretographics sq cman Svar : Använd mönsterpassning (pattern matchning)! Lösning: chesstographics :: Chess -> [Graphic] chesstographics (Chess squarechessmans) = map helper squarechessmans Kommentar : I de flesta språk "plockar man sönder en ADT" med selektorer (motsatsen till konstruerare) sådana funktioner kan man skriva i Haskell också förstås. För den inbyggda typen listor finns head :: [a] -> a tail:: [a] -> [a] och för par finns fst :: (a,b) -> a snd : (a,b) -> b Det är ck enklare att använda mönsterpassning (pattern match), t ex (för listor [], (x:xs), för par(a,b) ). Detta gör vana Haskell-programmerare alltid i den modul som definierar ADT-en. Vill man använda mönsterpassning i andra moduler (och det vill man nog ofta), måste man exportera konstruerarna för den konkreta datatypen. Datatypen är då inte längre abstrakt tyvärr. Konstruerarna definieras ju så här: data <Nytyp> = <Konstuerare>.. <Konstuerare> Tre sätt att exportera konstruerarna: module <NytypDT> where -- allt exporteras, enklast module <NytypDT> (<här räknar man upp det som skall exporteras inkl <Nytyp> och konstuerare> ) where module <NytypDT> (<här räknar man upp det som skall exporteras inkl <Nytyp> (..)>) where
4 "uncurring" mm. Ex helper ovan steg 6. Funktionen helper (sq, cman) = chessquaretographics sq cman i teknologlösningen ovan behövs för att chessquaretographics har typen chessquaretographics :: Square -> Chessman -> [Graphic] men skulle kunna funktionen direkt som argument till map om den hade typen chessquaretographics:: (Square, Chessman) -> [Graphic] Finns det andra lösningar än att använda en hjälpfunktion? Jomenvisst : 1. Använder man listomfattning är det inga problem: chesstographics (Chess rl) = concat [ chessquaretographics square cm (square, cm) <- rl] 2. Skriva om chessquaretographics.(tar mindre än en minut.) 3. Vi kan definera helper = \(sq, cman) -> chessquaretographics sq cman Lamda-uttrycket kan då "smackas in direkt" i map-uttrycket (Tar ca 20 sekunder att göra.) chesstographics (Chess squarechessmans) = map ( \(sq, cman) -> chessquaretographics sq cman) squarechessmans 4. Det skulle vara bra att slippa göra sådana här förvandlingar varje gång problemet dyker upp. Hur löser man det? Med funktioner förstås: Två användbara funktioner (finns förstås i Prelude) (överkurs i fjol) : curry :: ((a,b) -> c) -> a -> b -> c curry f x y = f (x, y) uncurry:: (a -> b -> c) -> (a,b) -> c uncurry f (x,y) = f x y Vi kan nu göra sånt som Prelude> uncurry (+) (3, 4) 7 -- Om du tvilar på att det uncurry kan vara så enkel, förenkla detta uttryck! I vårt fall : (tar 5 sekunder om man känner till att uncurry finns i Prelude) chesstographics (Chess squarechessmans) = map (uncurry chessquaretographics) squarechessmans
5 Interaktiva program. Inför steg 8 och 9. Se först labb-häftet 30 <= sid <=33. Inför steg 8 och 9. Interaction main =... loop =... styrning (control) modell Chess Square Chessman startstatus, vy firstgraphs ChessGraphic i PlayChess Computational "Man ska inte gråta över spilld mjölk" "Tja, man blir inte yngre med åren " Lite mer om IO-programmering. Kernel ("Vanlig Haskell") Shell -> IO a "tiden går" ireversibilitet S > 0 "gjort är gjort och kan inte göras ogjort" World omvärlden När vi programmerade vårt interaktiva skal använde vi ADT IO b med dessa operationer/funktioner: (>>=) :: IO a -> (a -> IO b) -> IO b (>>) :: IO a -> IO b -> IO b -- ofta IO ()->IO () -> IO () return :: a -> IO a -- alla finns i Prelude för IO b (>>) är en variant av (>>=) och används när vi inte behöver det värde som kom ut ur åtgärden IO a. (>>) kan definieras som action1 >> action2 = action1 >>=(\_ -> action2) return används när man vill tillverka en åtgärd, till exempel en hjälpfunktion av typ IO a, där värde med typen a beräknas ur vanliga Haskell- värden. Omvärden är oförändrad efteråt. a a w1:world return w1:world
6 För att visa att IO-programmering är riktig Haskell används operatorerna, men normalt använder man -syntaxen, då man skriver åtgärder under varandra efter reserverade ordet på ungefär detta sätt: operator-syntax -sekvenser med "satser" e >>= \x -> s x <- e -- x:: a, e :: IO a s -- s oftast typen IO (), -- exvis s1 x e >> s e -- e oftast typen IO() s -- s oftast typen IO() let d in e let d -- d ofta vanlig Haskell e Ett exempel : I vårt Schack-program steg 8 och 9 föreslås hur IO skall programmeras med givna funktioner main och loop.all interaktion med omvärden i loop på dessa ställen (fet stil ); all användning av "vanlig Haskell "i loop, ddvs uttryck med annan typ än IO a, är kursiverat: loop :: Winw -> (Colour, Chess) -> [Graphic] -> IO () loop w (cl, chess) graphs = sequence_ (map (drawinwinw w) graphs) -- rita ändringar (1.a gången allt) (i1, j1) <- getlbp w let sq1 = tosquare (i1, j1) -- flera def efter let OK chessman1 = chessmanat sq1 chess if not (correctcolour cl chessman1) then loop w (cl, chess) (mess1 cl "Wrong chessman colour. ") else sequence_ (map (drawinwinw w) messs) -- rita ny info på skärmen (i2, j2) <- getlbp w -- klick 2 let sq2 = tosquare (i2, j2) -- målrutan chessman2 = chessmanat sq2 chess -- pjäs på målrutan if not... Har man börjat programmera med åtgärder, dvs värde med typ IO b, kan man alltså använda beräkningar i beräkningskärnan som vi gjort ovan, - dels efter let, - dels när vi beräknar argument, men man kan inte få ett slutresultat av annan typ än IO a, eftersom >>, >>= och return alla ger resultat av typen IO, dvs skalet skyddar beräkningskärnan. Om denna funktion unsafeperformio :: IO a -> a skulle finnas i ADT IO i Haskell 98 skulle vi kunna skriva funktioner med sieffekter, världen av typ Word skulle kunna påverka resultatet av typ a. För en imperativ programmerare känns det ovant att man inte kan programmera vanliga funktioner med sieffekter, men det är avsiktligt; det är nämligen detta förhållande som gör att vi inte förstör Haskells funktionella karaktär. (Men funktionen unsafeperformio finns i ett paket man kan importera, så man kan synda, men det skall man naturligtvis inte göra för det är farligt, farligt (unsafe)...).
7 Man kan programmera vårt exempel med en hjälpfunktion IO :: Winw -> Chess -> [Graphic] -> IO (Square, Chessman) så här : loop :: Winw -> (Colour, Chess) -> [Graphic] -> IO () loop w (cl, chess) graphs = (sq1, chessman1) <- IO w chess graphs if not (correctcolour cl chessman1) then loop w (cl, chess) (mess1 cl "Wrong chessman colour. ") else (sq2, chessman2) <- IO w chess messs if not... För att definiera IO behövs return : IO :: Winw -> Chess -> [Graphic] -> IO (Square, Chessman) IO w chess graphs = sequence_ (map (drawinwinw w) graphs) (i, j) <- getlbp w let sq = tosquare (i, j) chessman = chessmanat sq chess return (sq, chessman) -- :: IO (Square, Chessman) En -sekvensen har den typ som sista åtgärden, "satsen" har. Så fort en åtgärds-sekvens har minst två åtgärder krävs ett. Egentligen är en -sekvens ett uttryck, "satser" saknas alltså i funktionella språk. Paret (i, j) är en parametrar; -syntaxen ovan är en omskrivning av IO w chess graphs = sequence_ (map (drawinwinw w) graphs) >> getlbp w >>= \ (i, j) -> resten av IO kan använda parametern (1,j) I praktiken programmerar man det interaktiva skalet på liknade sätt som i imperativa programmering. Om man använder hugs behövs ju överhuvud taget inget interaktiv skal så länge inte inmatning och utmatning är "inflätade" i varandra eller man behöver använda filer, ska rita, mm. Man försöker förstås göra skalet "tunt", eftersom det är så trevligt att programmera med vanlig Haskell i "beräkningskärnan", "the Computional Kernel". Men när man använder IO-programmering hävdar Pyton-Jones: "In short, Haskell is the world s finest imperative language" Hemligheten med IO-monad-programmering är precis som i vanliga Haskell att ha ordning på typerna. I programfragmentet nedan är den kursiverade texten vanlig Haskell, dvs uttryck som har andra typer än IO b, dvs vi lämnar "skalet" och använder oss av "beräkningskärnan". Typerna för "satserna" i sekvenserna är kommenterade.
8 loop :: Winw -> (Colour, Chess) -> [Graphic] -> IO () loop w (cl, chess) graphs = (sq1, chessman1) <- IO w chess graphs -- (sq1, chessman1) :: (Square,Chessman) -- IO w chess graphs :: IO (Square,Chessman) if not (correctcolour cl chessman1) -- IO () hela if-uttrycket then loop w (cl, chess) (mess1 cl "Wrong..") -- IO () uttrycket efter then else -- IO () uttrycket efter else (sq2, chessman2) <- IO w chess messs -- (sq1, chessman1) :: (Square,Chessman) -- IO w chess graphs :: IO (Square,Chessman) if not IO () hela if-uttrycket then loop IO() uttrycket efter then else... let newcolor = othercolor cl... in loop.. -- IO () uttrycket efter else Varför värden beter sig korrekt i ADT IO b. enda sättet att kombinera åtgärder, världen förändras stegvis, som den ska Haskell och andra språk. Haskell hade troligen varit ett mer använt språk om det tidigt funnits standard för samverkan med kod skrivit i andra språk. Standard för detta börjar komma först nu. Man kan kanske tycka att språket är så bra att man inte behöver beblanda sig med underlägsna imperativa språk, men de finns personer som anser en sådan inställning orealistisk. Eftersom kod skrivna i andra språk ofta har sieffekter bör Haskell betrakta de flesta importerade funktioner i skrivna i "främmande" språk som funktioner med resultat av typ IO (). Kompilering och interpretering. Hugs är en interpretator, och i början skrev vi uttryck i hugs som hugs då beräknade. Från steg 3 i schacklabben har vi ibland skrivit funktioner av typen IO (), som vi döpt till main. I dessa funktioner har vi kunnat växelverka med omvärden. I definitionen av Haskell står att det alltid skall finnas en funktion main :: IO(), dvs main :: World -> ((), World). Programmet startar med att beräkna main och tar alltså hänsyn till världen och påverkar värden. Hugs klar ju detta, men dessutom kan vi få hugs att beräkna uttryck av godtycklig typ. På liknade sätt som Blue J kan använda java på ett mer avancerat sätt än en java-kompilator, kan hugs mer än en Haskell-kompilator. Den mest använda kompilatorn för Haskell heter ghc och program för ghc skall ha en funktion main :: IO()som startar körningen.
Föreläsning 5 i programmeringsparadigm. Tips kring programmering i Haskell och kring labbarna.
Föreläsning 5 i programmeringsparadigm. Tips kring programmering i Haskell och kring labbarna. Att arbeta med två fönster. Hugs är ju en tolk (interpreter) vilket har stora fördelar vid programutveckling.
Läs merDD1361 Programmeringsparadigm. Carina Edlund
DD1361 Programmeringsparadigm Carina Edlund carina@nada.kth.se Funktionell programmering Grundidéen med funktionell programmering är att härma matematiken och dess funktionsbegrepp. Matematiskt funktionsbegrepp
Läs merTentamensdag 2002-aug-20 Tentamen i Funktionell Programmering Skrivtid 5 h
Nada Tentamensdag 2002-aug-20 Tentamen i Funktionell Programmering Skrivtid 5 h Antalet uppgifter : 5 ( 26p +22p + 14p +26p + 12 p= 100 p ) Lärare, jourhavande lärare : Leif Kusoffsky ------------------------------------------------------------------------------------------------------------------
Läs merFöreläsning 5 i programmeringsparadigm.
Föreläsning 5 i programmeringsparadigm. λ-notation (lamda-notation, anonyma funktioner). Hutton 4.5. (Fokker 2.3.4.) Vi kan om vi vill definiera hjälpkonstanter, t ex i denna funktiondefinition : kommunalskatt
Läs merFunktionell programmering DD1361
Funktionell programmering DD1361 Tupler Två eller fler (men ändligt) antal element. Elementen kan vara av olika typer. Ex: (1,2) :: (Integer, Integer) (( 2, hejsan ), True) ::? Tupel med två element ->
Läs merFöreläsning 4 (och 5?) i programmeringsparadigm.
Föreläsning 4 (och 5?) i programmeringsparadigm. Högre ordningens funktioner på listor; funktioner som argument: map, filter. (Fokker 3.1.3, C&K p 37, 38) map -- förändra alla element i en lista på samma
Läs merProgrammering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p
Programmering i C++ En manual för kursen Datavetenskaplig introduktionskurs 5p Skriven av Michael Andersson Introduktion Programmering I högnivåspråk fokuserar på själv problemet (algoritmen) istället
Läs merFöreläsning 8. Paradigmöversikt, paradigmhistoria, paradigmgeografi. Se även föreläsning 1.
Föreläsning 8. Paradigmöversikt, paradigmhistoria, paradigmgeografi. Se även föreläsning 1. Användning av Prolog. Haskell kan i princip användas till mycket, men grafiska paket, kopplingar till färdiga
Läs merNada KTH 2003 okt 23 Tentamen Programmeringsparadigm 2D1350 Skrivtid 5 h 8-13
Nada KTH 2003 okt 23 Tentamen Programmeringsparadigm 2D1350 Skrivtid 5 h 8-13 Antalet uppgifter : 1 (allmänt)+ 4 (Haskell) + 4 (Prolog) = 9 10p +(14p + 12p +10p+ 14p) + (8p +12p + 12p +8p) = 10p + 50p
Läs merFöreläsning 8. newtype Chess = Chess [(Square, Chessman)] -- data ist f newtype OK -- data istället för newtype krävs om >1 konstruerare.
Föreläsning 8. Typer och programmeringsstil i Haskell. När vi definerade ett schack gjorde vi så här: newtype Chess = Chess [(Square, Chessman)] -- data ist f newtype OK deriving Show -- newtype effektivare
Läs merLambdas. (och fler design patterns) Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017
Lambdas (och fler design patterns) Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017 Funktioner En funktion (i programmeringstermer) är en operation som tar ett eller flera argument,
Läs merNada Tentamensdag 2004 okt 18 Tentamen Programmeringsparadigm Skrivtid 5 h
Nada Tentamensdag 2004 okt 18 Tentamen Programmeringsparadigm Skrivtid 5 h Antalet uppgifter : 1 (allmänt)+ 4 (Haskell) + 4 (Prolog) = 10p +(6p + 18p +6p+ 20p) + (10p +12p + 8p +10p) = 10p + 50p + 40 p
Läs merEnjoy Vattenfallsmodellen i funktionella språk
Föreläsning 2 i Programmeringsparadigm Funktionell programmering := variabler pekare sidoeffekter ;...; Fy, fy => bugfree förståeliga korta inga "satser", bara uttryck! Enjoy Vattenfallsmodellen i funktionella
Läs merEnjoy Vattenfallsmodellen i funktionella språk
Föreläsning 2 i Programmeringsparadigm Funktionell programmering := variabler pekare sidoeffekter ;...; Fy, fy => bugfree förståeliga korta inga "satser", bara uttryck! Enjoy Vattenfallsmodellen i funktionella
Läs merIntroduktion till Haskell
Introduktion till Haskell Elias Riedel Gårding NMA11, Teknisk Fysik (KTH) 2014 18 februari 2018 Elias Riedel Gårding (NMA11, F14) Introduktion till Haskell 18 februari 2018 1 / 29 Om Haskell Historik 1927:
Läs merNada KTH 2004 jan 12 Tentamen Programmeringsparadigm 2D1350 Skrivtid 5 h 8-13
Nada KTH 2004 jan 12 Tentamen Programmeringsparadigm 2D1350 Skrivtid 5 h 8-13 Antalet uppgifter : 1 (allmänt)+ 4 (Haskell) + 4 (Prolog) = 9 10p +( 5p + 14p +15p+ 16p) + (12p +10p + 10p +8p) = 10p + 50p
Läs merTentamen. Datalogi I, grundkurs med Java 10p, 2D4112, Lördagen den 30 november 2002 kl , salar E33, E34
Tentamen Datalogi I, grundkurs med Java 10p, 2D4112, 2002-2003 Lördagen den 30 november 2002 kl 9.00 14.00, salar E33, E34 Inga hjälpmedel 30 poäng ger säkert godkänt, 40 poäng ger betyg 4 50 poäng ger
Läs merKompilering och exekvering. Föreläsning 1 Objektorienterad programmering DD1332. En kompilerbar och körbar java-kod. Kompilering och exekvering
Föreläsning 1 Objektorienterad programmering DD1332 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer Kompilering och exekvering Ett program måste översättas till datorns språk
Läs merVälkomna till DIT012 IPGO. Tyvärr en bug i Google Docs: Sidnummer stämmer inte alltid. Alla anteckningar börjar på sidan 1.
Välkomna till DIT012 IPGO 1 Tyvärr en bug i Google Docs: Sidnummer stämmer inte alltid. Alla anteckningar börjar på sidan 1. Lärare och Handledare Kursansvariga, examinatorer, föreläsare och handledare
Läs merAnvända Python Laboration 1 GruDat, DD1344
Använda Python Laboration 1 GruDat, DD1344 Örjan Ekeberg 14 oktober 2008 Målsättning Målet med denna laboration är att du ska prova på att använda Python, framförallt interativt. Du ska också lära dig
Läs merTDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014
TDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt. Använd
Läs merFöreläsning 4 i programmeringsparadigm.
Föreläsning 4 i programmeringsparadigm. OBS! Schemat ändrades den 30 augusti.,om du tryckte ut schemat tidare, märk att det är ingen föreläsning 2005 sept 14 onsdag, däremot 2005 sept 20 13.00 i sal F1.
Läs merFöreläsning 8 i programmeringsparadigm. Kommentarer kring schacklabben.
Föreläsning 8 i programmeringsparadigm. Kommentarer kring schacklabben. Om man vill kontrollera hur mycket man skrivit i sina Haskell-moduler man köra unix-kommandot wc (word count):..> wc.hs 100 486 3292
Läs merMen först: Några funktioner ur preluden. Introduktion till programmering. Uppgiften. Variationer av uppgiften. Föreläsning 4
Introduktion till programmering Men först: Några funktioner ur preluden Vad är skillnaden mellan head str och take 1 str? Föreläsning 4 Ett större exempel. head :: [a] -> a take :: Int -> [a] -> [a] tail
Läs merKap9. Operatorn.. Hudak 9.4 sid 11. Fermats förmodan, eller Fermats stora sats säger att. xm + ym == zm har heltalslösningar om och endast om m == 2.
Föreläsning 6. Hudak kapitel 8, 9, 10, 11, 23, Appendix B. Grafik med klickning. 2D1370 Funktionell programmering v14 torsdag Kap 8. Ett exempel på användning av listomfattningar. Fermats förmodan, eller
Läs merFöreläsning 2. Täcker material från lektion 1, 2, 3 och 4:
(22 januari 2016 F2.1 ) Föreläsning 2 Täcker material från lektion 1, 2, 3 och 4: Datatyper Aritmetik Tecken och strängar Klasser, Objekt Metoder Villkor, villkorssatser och iterationer main-metoden Kodstandard
Läs merDel : Funktionell programmering. I alla deluppgifterna, använd Haskell och skriv typen för de identifierare du definierar.
Nada Tentamensdag 2005 jan11 Tentamen Programmeringsparadigm Skrivtid 5 h Antalet uppgifter : 1 (allmänt)+ 4 (Haskell) + 4 (Prolog) = 10p +(6p + 10p +14p+ 20p) + (9p +11p + 8p +12p) = 10p + 50p + 40 p
Läs merkl Tentaupplägg
Tentaupplägg TIPS 1: Läs igenom ALLA uppgifterna. Välj den du känner är lättast först. Det kan gärna ta 10-20 minuter. Försök skriva saker som kan vara problem i uppgifterna. Är det något du absolut kommer
Läs merMMA132: Laboration 2 Matriser i MATLAB
MMA132: Laboration 2 Matriser i MATLAB Introduktion I den här labben skall vi lära oss hur man använder matriser och vektorer i MATLAB. Det är rekommerad att du ser till att ha laborationshandledningen
Läs merProgram & programmering
Program & programmering Vad är program? Satser och instruktioner, toggla igenom exempel Program på olika nivåer, för olika maskiner, för olika saker Tolka program; kompilator, intepretator, binärbytekod,
Läs merLabb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic
Labb i Datorsystemteknik och programvaruteknik Programmering av kalkylator i Visual Basic Inledning Starta Microsoft Visual Studio 2005. Välj create Project Välj VB + Vindows Application och välj ett nytt
Läs merF4. programmeringsteknik och Matlab
Programmeringsspråk Föreläsning 4 programmeringsteknik och Matlab 2D1312/ 2D1305 Introduktion till Java Kompilering, exekvering, variabler, styrstrukturer 1 Ett program är en eller flera instruktioner
Läs merProgrammering med Java. Grunderna. Programspråket Java. Programmering med Java. Källkodsexempel. Java API-exempel In- och utmatning.
Programmering med Java Programmering med Java Programspråket Java Källkodsexempel Källkod Java API-exempel In- och utmatning Grunderna Ann Pan panda@nada.kth.se Rum 1445, plan 4 på Nada 08-7909690 Game.java
Läs merAnvändarhandledning Version 1.2
Användarhandledning Version 1.2 Innehåll Bakgrund... 2 Börja programmera i Xtat... 3 Allmänna tips... 3 Grunderna... 3 Kommentarer i språket... 4 Variabler... 4 Matematik... 5 Arrayer... 5 på skärmen...
Läs merVälkommen till. Datastrukturer, algoritmer och programkonstruktion. eller DOA
Välkommen till Datastrukturer, algoritmer och programkonstruktion eller DOA Jag: Christer Labbassar: Caroline: Johan: Agenda, före lunch Inledning om DOA-kursen Backspegel Mål Syfte Examination Om lärande
Läs merSätt att skriva ut binärträd
Tilpro Övning 3 På programmet idag: Genomgång av Hemtalet samt rättning Begreppet Stabil sortering Hur man kodar olika sorteringsvilkor Inkapsling av data Länkade listor Användning av stackar och köer
Läs merEclipse. Avsikt. Nu ska ett fönster liknande figuren till höger synas.
Eclipse Avsikt Att bekanta dig med Eclipse programmeringsmiljö, dvs att med hjälp av Eclipse 1. skapa ett nytt projekt 2. skriva in källkod (sparas som.java-fil) 3. kompilera (översätta) koden till byte-kod
Läs merFöreläsning 4 (och 5?) i programmeringsparadigm.
Föreläsning 4 (och 5?) i programmeringsparadigm. Korrekta bilnummer. Programmet, som visar att man ibland använder smarta mönster för att skriva eleganta program, finns på /info/progp02/haskelllectures/f4.
Läs merObjektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6
Laboration 2 Objektorienterad programmering i Java I Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6 Syfte: Att kunna använda sig av olika villkors- och kontrollflödeskonstruktioner
Läs merFöreläsning 2 Programmeringsteknik och C DD1316. Mikael Djurfeldt
Föreläsning 2 Programmeringsteknik och C DD1316 Mikael Djurfeldt Föreläsning 2 Programmeringsteknik och C Python introduktion Utskrift Inläsning Variabler Datatyp Aritmetiska operatorer Omvandling
Läs merDel : Funktionell programmering. I alla deluppgifterna, använd Haskell och skriv typen för de identifierare du definierar.
Nada Tentamensdag 2004 aug 23 Tentamen Programmeringsparadigm Skrivtid 5 h Antalet uppgifter : 1 (allmänt)+ 4 (Haskell) + 4 (Prolog) = 10p +(5p + 20p +5p+ 20p) + (10p +12p + 8p +10p) = 10p + 50p + 40 p
Läs merMultipel tilldelning. Introduktion till programmering D0009E. Föreläsning 6: Iteration. while-satsen. Kom ihåg. Snurror kontra rekursion
Introduktion till programmering D0009E Föreläsning 6: Iteration Multipel tilldelning Helt ok att tilldela en variabel flera gånger: bruce = bruce, bruce = 7 bruce Output: 7 Som tillståndsdiagram: bruce
Läs merFöreläsning 7 i programmeringsparadigm. Ytterligare Högre ordningens funktioner: filter, foldr foldl. Hutton 7.2, 7.3 och 7.4.
Föreläsning 7 i programmeringsparadigm. Ytterligare Högre ordningens funktioner: filter, foldr foldl. Hutton 7.2, 7.3 och 7.4. filter se Hutton. När man använder filter och map får man ofta glädje av anonyma
Läs merKungliga Tekniska Högskolan Ämneskod 2D1370 Tentamensdag 2001-maj-31 Tentamen i Funktionell Programmering Skrivtid 4 h
Kungliga Tekniska Högskolan Ämneskod 2D1370 Nada Tentamensdag 2001-maj-31 Tentamen i Funktionell Programmering Skrivtid 4 h Antalet uppgifter : 4 ( 8p +10p + 10p +12p = 40 p) Lärare, jourhavande lärare
Läs merProgrammera i C Varför programmera i C när det finns språk som Simula och Pascal??
Programmera i C Varför programmera i C när det finns språk som Simula och Pascal?? C är ett språk på relativt låg nivå vilket gör det möjligt att konstruera effektiva kompilatorer, samt att komma nära
Läs merObjektorienterad programmering Föreläsning 2
Objektorienterad programmering Föreläsning 2 Copyright Mahmud Al Hakim mahmud@webacademy.se www.webacademy.se Agenda Inläsning av data via dialogrutor Repetitioner (While-satsen och For-satsen) Nästlade
Läs merFrontPage Express. Ämne: Datorkunskap (Internet) Handledare: Thomas Granhäll
FrontPage Express I programpaketet Internet Explorer 4.0 och 5.0 ingår också FrontPage Express som installeras vid en fullständig installation. Det är ett program som man kan använda för att skapa egna
Läs merNetBeans 7. Avsikt. Projektfönster
NetBeans 7 Avsikt Att bekanta dig med NetBeans programmeringsmiljö, dvs att med hjälp av NetBeans 1. skapa ett nytt projekt 2. skriva in källkod (sparas som.java-fil) 3. kompilera (översätta) koden till
Läs merFö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 10 Datalogi 1 DA2001 python introduktion Variabler Datatyp Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer på skärmen print( Hej ) print( Hur är det?
Läs merFöreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk
Föreläsning 2 steknik DD1310 python introduktion Variabler Datatyp Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer funktioner betyder att instruera en dator Ett program
Läs merKlassdeklaration. Metoddeklaration. Parameteröverföring
Syntax: Class Declaration Modifier Class Body Basic Class Member Klassdeklaration class Class Member Field Declaration Constructor Declaration Method Declaration Identifier Class Associations Motsvarar
Läs merIntroduktion till programmering D0009E. Föreläsning 5: Fruktbara funktioner
Introduktion till programmering D0009E Föreläsning 5: Fruktbara funktioner 1 Retur-värden Funktioner kan både orsaka en effekt och returnera ett resultat. Hittills har vi ej definierat några egna funktioner
Läs merImperativ programmering. Föreläsning 2
Imperativ programmering 1DL126 3p Föreläsning 2 Imperativ programmering Kännetecken för imperativa språk: Programmet består av en serie instruktioner. Olika språk har olika uppsättningar av instruktioner.
Läs merFöreläsning 6: Introduktion av listor
Föreläsning 6: Introduktion av listor Med hjälp av pekare kan man bygga upp datastrukturer på olika sätt. Bland annat kan man bygga upp listor bestående av någon typ av data. Begreppet lista bör förklaras.
Läs merTDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare
TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2019 Introduktion till Java -- för Pythonprogrammerare Historia: C, C++ 3 Historia: Oak 1 4 1990: Sun Microsystems påbörjade projekt StarSeven Avancerad
Läs merNetBeans 5.5. Avsikt. Projektfönster
NetBeans 5.5 Avsikt Att bekanta dig med NetBeans programmeringsmiljö, dvs att med hjälp av NetBeans 1. skapa ett nytt projekt 2. skriva in källkod (sparas som.java-fil) 3. kompilera (översätta) koden till
Läs merAlla filer som bearbetar PHP script ska avslutas med ändelsen.php, exempelvis ska en indexsida till en hemsida heta index.php
Introlektion PHP är ett av de enklare språken att lära sig just pga. dess dynamiska struktur. Det används för att bygga upp båda stora och mindre system. Några vanliga system som använder sig av PHP är
Läs merRepetition i Python 3. Exemplen fac. Exemplen fac motivering. Exemplen fac i Python
Repetition i Python 3 Exemplen fac Orginalet I Scheme använde vi rekursion för all slags repetition. Efterom Scheme är ett funktionellt språk återsänder alla språkkonstruktioner ett värde men i Python
Läs merVariabler och konstanter
Variabler och konstanter Deklareras automatisk när man stoppar in data i dem. X = 7 Y = A Z = Kalle Definieras av att de har: ett namn (X) en datatyp (Integer) ett värde (t.ex. 7) Lagras i datorns minne!
Läs mer729G04 Programmering och diskret matematik. Python 2: Villkorssatser, sanningsvärden och logiska operatorer
729G04 Programmering och diskret matematik Python 2: Villkorssatser, sanningsvärden och logiska operatorer Föreläsningsöversikt Vad händer när vi kör vår pythonkod? Programmerare Villkorssatser Jämförelser
Läs merDel : Paradigmer allmänt.
Nada Tentamensdag 2003 aug 25 Tentamen Programmeringsparadigm Skrivtid 5 h Antalet uppgifter : 1 (allmänt)+ 4 (Haskell) + 4 (Prolog) = 5p +(12p + 15p +5p+ 20p) + (10p +14p + 8p +11p) = 5p + 52p + 43 p
Läs mer732G Linköpings universitet 732G11. Johan Jernlås. Översikt. Repetition. Exempelduggan. Luffarschack. Koda spel
732G11 Linköpings universitet 2011-02-15 1 2 3 4 Extrapass Extrapass håller på att bokas. Blir 3-4 st. och öppet för alla. Mer info på kursmailen när bokningen är klar. i Java En funktion i Java... public
Läs merMATLAB. Python. Det finns flera andra program som liknar MATLAB. Sage, Octave, Maple och...
Allt du behöver veta om MATLAB: Industristandard för numeriska beräkningar och simulationer. Används som ett steg i utvecklingen (rapid prototyping) Har ett syntax Ett teleskopord för «matrix laboratory»
Läs merFunktionell programmering. Haskell. Ge#ng started...
Funktionell programmering Haskell Ge#ng started... Installera Haskell För a/ installera Haskell på egen maskin, ladda ned Haskell Pla9orm från h/p://www.haskell.org/pla9orm/ Där finns instrukdoner, dokumentadon,
Läs merNågra inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.
Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E Föreläsning 4: Villkor och rekursion Konverterar mellan de grundläggande typerna: >>> int("") >>> int(.999) >>> float().0
Läs merProgrammering I Tobias Wrigstad fredag, 2009 augusti 28
Programmering I Tobias Wrigstad tobias@dsv.su.se Vad är programmering? Lågnivåspråk och högnivåspråk Kompilering och interpretering Variabler Notation för flödesschema (flow chart) Kontrollstrukturer (conditionals,
Läs merIntroduktion till programmering SMD180. Föreläsning 5: Fruktbara funktioner
Introduktion till programmering Föreläsning 5: Fruktbara funktioner 1 Retur-värden Funktioner kan både orsaka en effekt och returnera ett resultat. Hittills har vi ej definierat några egna funktioner med
Läs merTextsträngar från/till skärm eller fil
Textsträngar från/till skärm eller fil Textsträngar [Kapitel 8.1] In- och utmatning till skärm [Kapitel 8.2] Rekursion Gränssnitt Felhantering In- och utmatning till fil Histogram 2010-10-25 Datorlära,
Läs merTDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18
TDDC74 Programmering: Abstraktion och modellering Datortenta - 017-10-7, kl 14-18 Läs alla frågorna först och bestäm dig för i vilken ordning du vill lösa uppgifterna. Uppgifterna är inte nödvändigtvis
Läs merTDDD78, TDDE30, 729A Introduktion till Java -- för Pythonprogrammerare
TDDD78, TDDE30, 729A85 jonas.kvarnstrom@liu.se 2018 Introduktion till Java -- för Pythonprogrammerare Historia: C, C++ 3 Historia: Oak 1 4 1990: Sun Microsystems påbörjade projekt StarSeven Avancerad
Läs merDel : Paradigmer allmänt.
Nada Tentamensdag 2003 jan 13 Tentamen Programmeringsparadigm Skrivtid 5 h Antalet uppgifter : 1 (allmänt)+ 3 (Haskell) + 4 (Prolog) = 5p +(15p + 15p +20p) + (10p +12p + 15p +8p) = 5p + 50p + 45 p = 100p
Läs merTentamen i TDP004 Objektorienterad Programmering Praktisk del
Tentamen i TDP004 Objektorienterad Programmering Praktisk del Datum: 2011-04-28 Tid: 08-12 Plats: SU-salar i B-huset. Jour: Per-Magnus Olsson, tel 281456 Jourhavande kommer att besöka skrivsalarna ungefär
Läs merBackcode. Jonathan Crusoe TDP019 Projekt: Datorspråk Linköpings universitet
Žƒ ƒ Ž Ž ˆ ƒ ƒ ƒ Žƒ ƒ Ž ˆ Œ ŽŽ ƒ Backcode Jonathan Crusoe TDP019 Projekt: Datorspråk Linköpings universitet Innehållsförteckning 12-05-29 Inledning... 3 Användarhandledningen... 4 Klasser... 4 Metoder...
Läs merBEGREPP HITTILLS FÖRELÄSNING 2 SAMMANSATTA UTTRYCK - SCHEME DATORSPRÅK
FÖRELÄSNING 2 Viss repetition av Fö1 Rekursivt fallanalys Rekursiva beskrivningar BEGREPP HITTILLS Konstant, Namn, Procedur/Funktion, LAMBDA, Parameter, Argument, Kropp, Villkor/Rekursion, Funktionsanrop,
Läs merObjektorienterad programmering E. Telefonboken, än en gång. Gränssnitt. Telefonboken med gränssnitt specificerat, del 1.
Objektorienterad programmering E Telefonboken, än en gång Föreläsning 5 Wrapper classes Exempel, histogram. Inldening om undantag. Mer om klassen Påminnelse Vår senaste version bestod av två klasser, bägge
Läs merTDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 27 augusti 2016, kl 8 12
TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 27 augusti 2016, kl 8 12 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt.
Läs merTDIU01 - Programmering i C++, grundkurs
TDIU01 - Programmering i C++, grundkurs Sammanfattning period 1 Eric Elfving Institutionen för datavetenskap 1 oktober 2013 Översikt Ett C++-programs uppbyggnad Variabler Datatyper Satser Uttryck Funktioner
Läs merTDDC74 Lab 04 Muterbara strukturer, omgivningar
TDDC74 Lab 04 Muterbara strukturer, omgivningar 1 Översikt I den här laborationen kommer ni att lära er mer om: Tillstånd, och skillnader mellan ren funktionell programmering och imperativ. Skillnaden
Läs merSystem.out.println("Jaså du har "+ antalhusdjur+ " husdjur"); if ( antalhusdjur > 5 ) System.out.println("Oj det var många);
1 Villkor och styrsatser I de program vi sett tidigare har programkörning inneburit att sats efter sats utförts i den ordning de skrivits i källkoden. Vi har inte kunna ändra programmets uppförande beroende
Läs merInstruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python TDDE24 Funktionell och imperativ programmering del 2
Instruktioner - Datortentamen TDDD73 Funktionell och imperativ programmering i Python TDDE24 Funktionell och imperativ programmering del 2 Hjälpmedel Följande hjälpmedel är tillåtna: Exakt en valfri bok,
Läs merProgrammeringsteknik med C och Matlab
Programmeringsteknik med C och Matlab Kapitel 2: C-programmeringens grunder Henrik Björklund Umeå universitet Björklund (UmU) Programmeringsteknik 1 / 32 Mer organisatoriskt Imorgon: Datorintro i lab Logga
Läs merLabb LIVE. Exempelkod från föreläsningen. Plushögskolan Frågeutveckling inom MSSQL - SU14
Labb LIVE Exempelkod från föreläsningen Plushögskolan Frågeutveckling inom MSSQL - SU14 Här kommer exempelkoden jag använde under föreläsningen Exemplen Constraints... 2 Transactions... 4 Views... 5 Functions...
Läs merRepetition C-programmering
Repetition C-programmering Viktor Kämpe C Historik Utvecklades först 1969 1973 av Dennis Ritchcie vid AT&T Bell Labs. Högnivå språk med kontakt mot maskinvara. Ett utav de mest använda språken. Repetition
Läs merFöreläsning 2 Programmeringsteknik och C DD1316. Programmering. Programspråk
Föreläsning 2 steknik och C DD1316 python introduktion Variabler Datatyp Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer betyder att instruera en dator Ett program
Läs merIntroduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret 2014-2015. Lektion 4
Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret 014-015 Denna lektion ska vi studera rekursion. Lektion 4 Principen om induktion Principen om induktion är ett vanligt sätt att bevisa
Läs merFöreläsning 8. Hudak kapitel 13. 2D1370 Funktionell programmering v15 torsdag
Föreläsning 8. Hudak kapitel 13. 2D1370 Funktionell programmering v15 torsdag Olika sorters program. Inmatning sker innan exekveringen startar under exekvering När exekvering sker bestäms av datorn "transformerande
Läs merRekursiva algoritmer sortering sökning mönstermatchning
Anders Haraldsson 1 Anders Haraldsson 2 Dagens föreläsning Programmering i Lisp Fö 6-7 Rekursiva strukturer rekursiva definitioner rekursiva funktioner rekursiva bevis: induktion - rekursion strukturell
Läs merLÖSNINGSFÖRSLAG TENTAMEN PROGRAMMERING I ETT FUNKTIONELLT SPRÅK ML, 5P
UMEÅ UNIVERSITET Datavetenskap 020321 Betygsgränser 0 19,5 U 20 25,5 3 26 31,5 4 32-40 5 LÖSNINGSFÖRSLAG TENTAMEN 020321 PROGRAMMERING I ETT FUNKTIONELLT SPRÅK ML, 5P Uppgift 1(3+2=5 poäng) I denna uppgift
Läs merUniversitetet i Linköping Institutionen för datavetenskap Anders Haraldsson 2
Anders Haraldsson 1 Anders Haraldsson 2 Dagens föreläsning Programmering i Lisp Fö 5 - Funktioner - lambda-uttryck (avs 7.1) - funcall och function (avs 7.2) - Högre ordningens funktioner (avs 7.) - Iteratorer
Läs merIntroduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion
Introduktion till programmering Föreläsning 4: Villkor och rekursion 1 1 Några inbyggda funktioner (med resultat!) Konverterar mellan de grundläggande typerna: >>> int("32") 32 >>> int(3.999) 3 >>> float(32)
Läs merÖversikt MERA JAVA OCH ECLIPSE. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning. Uttryck och tilldelning
Översikt Uttryck i tilldelningssatser Typer och typomvandling Klasser Metoder Konstanter Eclipse-tips MERA JAVA OCH ECLIPSE Institutionen för datavetenskap Programmering 1 Rita Kovordányi 2 public class
Läs mer729G04 Programmering och diskret matematik. Föreläsning 7
729G04 Programmering och diskret matematik Föreläsning 7 Föreläsningsöversikt Information Interaktion via text Läsa från fil Skriva till fil Spara och läsa abstrakta datatyper från fil Information Felaktigt
Läs merTDDC74 Programmering: Abstraktion och modellering Dugga 2, kl 8 10, 5 mars 2015
TDDC74 Programmering: Abstraktion och modellering Dugga 2, kl 8 10, 5 mars 2015 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt. Använd
Läs merDagens föreläsning Programmering i Lisp Fö 5
Anders Haraldsson 1 Dagens föreläsning Programmering i Lisp Fö 5 - Funktioner - lambda-uttryck (avs 7.1) - funcall och function (avs 7.2) - Högre ordningens funktioner (avs 7.3) - Iteratorer - Egenskaper
Läs merTDP002 - Imperativ programmering
TDP002 - Imperativ programmering Algoritmer Pontus Haglund Institutionen för datavetenskap Anpassatt från material ursprungligen av: Eric Elfving 1 Datatyper Tal UTF-8 2 Procedurell abstraktion Repetition
Läs merFöreläsning 2 Programmeringsteknik DD1310. Programmering. Programspråk
Föreläsning 2 steknik DD1310 Python introduktion Variabler Datatyper Aritmetiska operatorer av typer Reserverade ord logiska operatorer If-sats kommentarer betyder att instruera en dator Ett program är
Läs merkl Tentaupplägg
Tentaupplägg TIPS 1: Läs igenom ALLA uppgifterna. Välj den du känner är lättast först. Det kan gärna ta 10-20 minuter. Försök skriva saker som kan vara problem i uppgifterna. Är det något du absolut kommer
Läs merTentamen Grundläggande programmering
Akademin för Innovation Design och Teknik Tentamen Grundläggande programmering Kurskod: DVA103 Datum 2012-06-11 Tid 14.10 16.30 Examinator: Lars Asplund Maxpoäng: 48 Betygsgränser: Betyg 3: 20 Betyg 4:
Läs merTDDC30. Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU
TDDC30 Objektorienterad programmering i Java, datastrukturer och algoritmer. Föreläsning 11 Jonas Lindgren, Institutionen för Datavetenskap, LiU På denna föreläsning: Designmönster Adapter, Factory, Iterator,
Läs merImperativ och Funktionell Programmering i Python #TDDD73. Fredrik Heintz,
Imperativ och Funktionell Programmering i Python #TDDD73 Fredrik Heintz, IDA fredrik.heintz@liu.se @FredrikHeintz Översikt Repetition: Satser och uttryck Variabler, datatyper, synlighet och skuggning Upprepning,
Läs mer