College I/O

Maat: px
Weergave met pagina beginnen:

Download "College I/O"

Transcriptie

1 College I/O Doaitse Swierstra Verteld door Jurriaan Hage Utrecht University

2 Input en Output Tot dusverre: een module bevat een aantal functiedefinities GHCi drukt de waarde af van een ingetikte expressie 2

3 Input en Output Tot dusverre: een module bevat een aantal functiedefinities GHCi drukt de waarde af van een ingetikte expressie We willen ook echte programa s schrijven, zoals: Galaxy Life, Minecraft en Habbo Hotel Haskell compilers Programmeeromgevingen Webservers, Wiki s... 2

4 Wat is het probleem? Haskell s belangrijkste eigenschap is referential transparency, d.w.z. dat elke variabele door zijn definiërende expressie vervangen kan worden en omgekeerd dat aan elke deelexpressie een naam gegeven kan worden zonder dat dat de betekenis van het programma verandert: 3

5 Wat is het probleem? Haskell s belangrijkste eigenschap is referential transparency, d.w.z. dat elke variabele door zijn definiërende expressie vervangen kan worden en omgekeerd dat aan elke deelexpressie een naam gegeven kan worden zonder dat dat de betekenis van het programma verandert: Dus let x = <expr > in... x... x... is dus altijd equivalent met:... < expr >... <expr >... 3

6 Wat is het probleem? Haskell s belangrijkste eigenschap is referential transparency, d.w.z. dat elke variabele door zijn definiërende expressie vervangen kan worden en omgekeerd dat aan elke deelexpressie een naam gegeven kan worden zonder dat dat de betekenis van het programma verandert: Dus let x = <expr > in... x... x... is dus altijd equivalent met:... < expr >... <expr >... En ook: (\ x <expr1>) < expr2 > is per definitie equivalent met: 3 let x = <expr2 > in < expr1 >

7 Wat is dan het voordeel? volgorde van evaluatie blijkt dan niet meer van belang, omdat evaluatie van een expressie geen effect kan hebben op een andere de compiler kan dan zijn eigen volgorde kiezen lazy evaluation is zonder referential transparency praktisch onmogelijk parallelliseren wordt ook gemakkelijker: waar of wanneer een expressie dan ook uitgerekend wordt er komt altijd hetzelfde uit En λ s zijn daar ook heel handig voor: Java Maar...we kunnen niet helemaal zonder 4

8 Side-effects Stel er bestaat een functie random, dan zouden let x = random in x == x en random == random dus ook dezelfde betekenis moeten hebben. 5

9 Side-effects Stel er bestaat een functie random, dan zouden en let x = random in x == x random == random dus ook dezelfde betekenis moeten hebben.en dan voldoet de functie niet aan zijn specificatie. Deze functie bestaat dus niet! 5

10 Neveneffecten Iets soortgelijks gebeurt als we karakter inlezen met bijv. een functie getchar: en let x = getchar in x == x getchar == getchar zouden ook weer hetzelfde moeten zijn, en ook dat is weer moeilijk in te zien. 6

11 Hoe zit dan met deze paradox? Eigenlijk is hier sprake van een extra verborgen argument het filesysteem het toetsenbord de door de random functie al gegenereerde waarden Die bepalen mede de komende toestand en de uitvoer van functies De wereld om ons heen is het impliciete argument dat ervoor zorgt dat dezelfde aanroep verschillende gevolgen heeft Monads zorgen ervoor dat deze wereld impliciet is, en daarom ook niet dupliceerbaar 7

12 We modelleren eerst output We modelleren output door een berekening een resultaat op te laten leveren van type String. We maken dit expliciet d.m.v. een type declaratie: type Output = String 8

13 We modelleren eerst output We modelleren output door een berekening een resultaat op te laten leveren van type String. We maken dit expliciet d.m.v. een type declaratie: type Output = String Functies die een output actie representeren doen dit door de tot dusverre opgebouwde output te veranderen, en dus definiëren we: type O = Output > Output 8

14 We modelleren eerst output We modelleren output door een berekening een resultaat op te laten leveren van type String. We maken dit expliciet d.m.v. een type declaratie: type Output = String Functies die een output actie representeren doen dit door de tot dusverre opgebouwde output te veranderen, en dus definiëren we: type O = Output > Output De functie putchar krijgt verder de Char waarde die afgedrukt moet worden als parameter: 8 putchar :: Char > O putchar c output = output ++ [c]

15 Het combineren van twee output commando s Stel nu dat we de string "ab" aan de output willen toevoegen, gebruik makend van putchar a en putchar b. Hoe stellen we deze commandos dan samen?... putchar a... putchar b... 9

16 Het combineren van twee output commando s Stel nu dat we de string "ab" aan de output willen toevoegen, gebruik makend van putchar a en putchar b. Hoe stellen we deze commandos dan samen?... putchar a... putchar b... Een eerste poging: putab output = putchar b (putchar a output) of zelfs: putab = putchar b. putchar a 9

17 Het combineren van twee output commando s Stel nu dat we de string "ab" aan de output willen toevoegen, gebruik makend van putchar a en putchar b. Hoe stellen we deze commandos dan samen?... putchar a... putchar b... Een eerste poging: putab output = putchar b (putchar a output) of zelfs: putab = putchar b. putchar a Maar deze volgorde van schrijven in niet erg intuïtief. 9

18 Een natuurlijkere schrijfwijze We gaan nu monad-notatie inzetten voor het stroomlijnen van I/O code. type O = Output > Output (>>) :: O > O > O (>>) p q output = q (p output) -- Als je dat liever hebt: (>>) = flip (.) flip f x y = f y x Nu kunnen we schrijven: putab = putchar a >> putchar b 10

19 Een natuurlijkere schrijfwijze We gaan nu monad-notatie inzetten voor het stroomlijnen van I/O code. type O = Output > Output (>>) :: O > O > O (>>) p q output = q (p output) -- Als je dat liever hebt: (>>) = flip (.) flip f x y = f y x Nu kunnen we schrijven: putab = putchar a >> putchar b 10 Een ; zou een goed alternatief voor >> zijn geweest, maar die is al bezet.

20 Voorbeeldje Met deze operator is het nu makkelijk een hele string af te drukken: putstr "" = id putstr (s : ss) = putchar s >> putstr ss 11

21 Over naar input Als we een Char van de input lezen krijgen we eigenlijk twee resultaten: 1. het element op kop van de huidige input 2. het overblijvende stuk van de input, waar we later verder van kunnen lezen: 12

22 Over naar input Als we een Char van de input lezen krijgen we eigenlijk twee resultaten: 1. het element op kop van de huidige input 2. het overblijvende stuk van de input, waar we later verder van kunnen lezen: Dus definiëren we: type Input = String type I a = Input > (a, Input) -- een paar van waarden getchar :: I Char getchar (x : xs) = (x, xs) 12

23 Over naar input Als we een Char van de input lezen krijgen we eigenlijk twee resultaten: 1. het element op kop van de huidige input 2. het overblijvende stuk van de input, waar we later verder van kunnen lezen: Dus definiëren we: type Input = String type I a = Input > (a, Input) -- een paar van waarden getchar :: I Char getchar (x : xs) = (x, xs) 12 Maar deze kunnen we niet samenstellen zoals putchar; wat te doen met de waarde die we net ingelezen hebben?

24 De bind operator: >>= We besluiten deze waarde door te geven als argument aan de rest van de berekening ; deze rest representeren we dus als een functie: (>>=) :: I b > (b > I a) > I a (p >>= q) input = let (v, input ) = p input in (q v) input De waarde v selecteert de volgende input operatie. 13

25 getline Gebruikmakend van >>= en getchar kunnen we een regel inlezen die eindigt met een newline karakter: getline :: I String getline = getchar >>= (\ c if c == \n then (\ inp ("", inp)) else getline >>= (\ cs inp (c : cs, inp)) ) 14

26 Combineren van I en O Stel we willen nu een functie echo schrijven die een karakter inleest en weer afdrukt, gebruik makend van putchar en getchar. echo = getchar >>= (\ c putchar c) Of zelfs korter: echo = getchar >>= putchar 15

27 IO In de toestand die we nu willen bijhouden zit zowel de nog te lezen Input als de al geproduceerde Output. type World = (Input, Output) -- de twee stromen karakters type IO a = World > (a, World) putchar :: Char > IO () putchar o (ii, oo) = ((), (ii, oo ++ [o])) getchar :: IO Char getchar ((i : ii), oo) = (i, (ii, oo )) 16

28 IO In de toestand die we nu willen bijhouden zit zowel de nog te lezen Input als de al geproduceerde Output. type World = (Input, Output) -- de twee stromen karakters type IO a = World > (a, World) putchar :: Char > IO () putchar o (ii, oo) = ((), (ii, oo ++ [o])) getchar :: IO Char getchar ((i : ii), oo) = (i, (ii, oo )) echo :: IO () echo = getchar >>= putchar 16

29 >>= en >> veranderen mee type World = (Input, Output) -- de twee stromen karakters type IO a = World > (a, World) (>>=) :: IO b > (b > IO a) > IO a (iob >>= b2ioa) w = let (bval, w ) = iob w in b2ioa bval w (>>) :: IO b > IO a > IO a Aan het type van (>>) kun je zien dat deze sterk op (>>=) lijkt, maar het resultaat van de eerste berekening alleen niet doorgeeft. Dit kan als de tweede operatie het resultaat van de eerste niet nodig heeft. 17

30 De function main De Haskell main functie heeft type World > World, en je kan bij de aanroep van de functie main door het systeem denken aan iets als: run :: IO () > Input > Output run main input = main (input, "") >>= (\ () state > snd state) We beginnen met de lege output "" en als we klaar zijn leveren we het output gedeelte van de state op. 18

31 putchar Vergelijk: Prelude> a a Prelude> :t putchar putchar :: Char -> IO () Prelude> putchar a a 19

32 putchar Vergelijk: Prelude> a a Prelude> :t putchar putchar :: Char -> IO () Prelude> putchar a a Als we een expressie intikken in GHCi dan wordt er gekozen: 1. als het type van de expressie geen IO.. is: converteer het resultaat naar een String en druk die af 19

33 putchar Vergelijk: Prelude> a a Prelude> :t putchar putchar :: Char -> IO () Prelude> putchar a a Als we een expressie intikken in GHCi dan wordt er gekozen: 1. als het type van de expressie geen IO.. is: converteer het resultaat naar een String en druk die af 2. het type is IO (): voer de rij IO-acties uit (een imperatief programma) 19

34 De do-notatie maakt het weer leesbaarder Om de volgorde waarin de IO acties worden uitgevoerd helder in het programma naar voren te laten komen gebruiken we weer de do-notatie: zeggedag :: IO () zeggedag = do putchar H putchar i zeggedag = putchar H >> putchar i 20

35 De do-notatie maakt het weer leesbaarder Om de volgorde waarin de IO acties worden uitgevoerd helder in het programma naar voren te laten komen gebruiken we weer de do-notatie: zeggedag :: IO () zeggedag = do putchar H putchar i zeggedag = putchar H >> putchar i Indentatie doet er weer toe! 20

36 Recursieve acties De meeste functies die een lijst gebruiken zijn recursief: putstr :: String > IO () putstr (x : xs) = do putchar x putstr xs 21

37 Recursieve acties putstr :: String > IO () putstr (x : xs) = do putchar x putstr xs putstr [ ] = return () Hier staat return () voor een lege lijst van IO-acties. return :: a > IO a 21

38 Vervangen van >>= door do-notatie We kunnen in do-notatie ook een naam geven aan het resultaat van een actie: echo :: IO () echo = do x < getchar putchar x 22

39 Vervangen van >>= door do-notatie We kunnen in do-notatie ook een naam geven aan het resultaat van een actie: echo :: IO () echo = do x < getchar putchar x Test> :t getchar getchar :: IO Char Test> echo a a Test> 22

40 ... Wat zou het resultaat van het volgende programma zijn? sayhi :: IO () sayhi = do putchar H return "does nothing" putchar i 23

41 ... Wat zou het resultaat van het volgende programma zijn? sayhi :: IO () sayhi = do putchar H return "does nothing" putchar i Test> sayhi Hi Test> 23

42 ... Wat zou het resultaat van het volgende programma zijn? sayhi :: IO () sayhi = do putchar H return "does nothing" putchar i Test> sayhi Hi Test> Dus return krijgt hier een argument, dat teruggegeven wordt en vervolgens wordt weggegooid. 23

43 Iets explicieter sayhi :: IO () sayhi = do < putchar H < return "does nothing" putchar i 24

44 Iets explicieter sayhi :: IO () sayhi = do < putchar H < return "does nothing" putchar i De return aanroep levert weliswaar een waarde op, maar die krijgt geen naam, en is verderop dus niet beschikbaar. 24

45 Vergelijk dit met... sayhi :: IO () sayhi = do putchar H text < return ", FP students" putchar i putstr text 25

46 Vergelijk dit met... sayhi :: IO () sayhi = do putchar H text < return ", FP students" putchar i putstr text Test> sayhi Hi, FP students Test> 25

47 Enigszins ontsuikerd is dat... sayhi :: IO () sayhi = do < putchar H text < return ", FP students" < putchar i < putstr text 26

48 IO waarden zijn gewoon waarden! printlater = do < putchar H pr text < return (putstr ", FP students") < putchar i pr text 27

49 IO waarden zijn gewoon waarden! printlater = do < putchar H pr text < return (putstr ", FP students") < putchar i pr text De types zijn: return :: a > IO a 27

50 IO waarden zijn gewoon waarden! printlater = do < putchar H pr text < return (putstr ", FP students") < putchar i pr text De types zijn: return :: a > IO a putstr ", FP students" :: IO () 27

51 IO waarden zijn gewoon waarden! printlater = do < putchar H pr text < return (putstr ", FP students") < putchar i pr text De types zijn: return :: a > IO a putstr ", FP students" :: IO () return (putstr ", FP students") :: IO (IO ()) 27

52 IO waarden zijn gewoon waarden! printlater = do < putchar H pr text < return (putstr ", FP students") < putchar i pr text De types zijn: return :: a > IO a putstr ", FP students" :: IO () return (putstr ", FP students") :: IO (IO ()) pr text :: IO () 27

53 getline De functie getline :: IO String leest een regel: greeting :: IO () greeting = do putstr "What is your name? " name < getline putstrln ("Hello, " ++ name) 28

54 getline De functie getline :: IO String leest een regel: greeting :: IO () greeting = do putstr "What is your name? " name < getline putstrln ("Hello, " ++ name) Test> greeting What is your name? Doaitse Hello, Doaitse De functie putstrln zet een extra \n aan het eind. 28

55 Eenvoudige IO uit de Prelude (1) print :: Show a => a > IO () print e = putstrln (show e) -- of print = putstrln. show getline :: IO String getline = do x < getchar if c == \n then return "" else do xs < getline return (x : xs) 29

56 Eenvoudige IO uit de Prelude (1) print :: Show a => a > IO () print e = putstrln (show e) -- of print = putstrln. show getline :: IO String getline = do x < getchar if c == \n then return "" else do xs < getline return (x : xs) Merk op dat beide takken van de if... then... else... type IO... hebben. Vergelijk deze getline eens met de eerdere versie: de input buffer is verborgen in de monad. 29

57 Eenvoudige IO uit de Prelude (2) De basis IO acties return :: a > IO a putchar :: Char > IO () putstr :: String > IO () putstrln :: String > IO () print :: Show a => a > IO () getline :: IO String writefile :: FilePath > String > IO () readfile :: FilePath > IO String 30

58 Nog even over types Als monads een mode representeren waarin je evalueert. Dan representeert IO Int een berekening die I/O kan doen en uiteindelijk een Int oplevert (bv. de grootte van een bestand). Maar niet alle I/O operaties die je hiervoor doet hoeven van type IO Int te zijn: je kunt een file openen, IO () karakters uitlezen IO Char en nog veel meer Het type geeft dus aan wat je uiteindelijk oplevert in welke mode de gehele functie opereerde Die eerste kan variëren, de tweede is constant 31

59 Nieuwe control structures Omdat iets van type IO... een waarde heeft, kunnen we ze dus opleveren als resultaat van een functie, of als parameter meegeven: sequence sequence :: [IO a] > IO [a] 32

60 Nieuwe control structures Omdat iets van type IO... een waarde heeft, kunnen we ze dus opleveren als resultaat van een functie, of als parameter meegeven: sequence sequence :: [IO a] > IO [a] sequence [ ] = return [ ] sequence (s : ss) = do x < s xs < sequence ss return (x : xs) 32

61 Nieuwe control structures Omdat iets van type IO... een waarde heeft, kunnen we ze dus opleveren als resultaat van een functie, of als parameter meegeven: sequence sequence :: [IO a] > IO [a] sequence [ ] = return [ ] sequence (s : ss) = do x < s xs < sequence ss return (x : xs) 32 De functie sequence krijgt een lijst van commando s, voert deze uit, en levert de lijst van corresponderende resultaten op.

62 sequence sequence sequence :: [IO a] > IO () sequence [ ] = return () sequence (s : ss) = do s sequence ss 33

63 sequence sequence sequence :: [IO a] > IO () sequence [ ] = return () sequence (s : ss) = do s sequence ss En nu: putstr str = sequence (map putchar str) 33

64 sequence sequence sequence :: [IO a] > IO () sequence [ ] = return () sequence (s : ss) = do s sequence ss En nu: putstr str = sequence (map putchar str) Of korter: putstr = sequence. map putchar 33

65 Een Real World Program We schijven een number guessing programma: "Pick a number between 1 and 100. Is it 50? (g = greater, l = less, c = correct) g Is it 75? (g = greater, l = less, c = correct) l Is it 62? (g = greater, l = less, c = correct) g Is it 68? (g = greater, l = less, c = correct) l Is it 65? (g = greater, l = less, c = correct) c Guessed 34

66 Het hoofdprogramma main main :: IO () main = do putstrln "Pick a number between 1 and 100" guess

67 De functie guess guess :: Int > Int > IO () guess lower upper = let mid = (upper + lower) div 2 in do putstr ("Is it " ++ showint mid ++ "? ") putstrln "(g = greater, l = less, c = correct)" (v: ) < getline case v of g guess (mid + 1) upper l guess lower (mid 1) c putstrln "Guessed" do putstrln "Please type (g/l/c)!" guess lower upper 36

68 Samenvatting IO het type IO a representeert een rij neveneffecten 37

69 Samenvatting IO het type IO a representeert een rij neveneffecten gebruik makend van een do constructie kunnen we dergelijke commando s samenstellen; een sequentiële bewerkstelliging van deze side-effects 37

70 Samenvatting IO het type IO a representeert een rij neveneffecten gebruik makend van een do constructie kunnen we dergelijke commando s samenstellen; een sequentiële bewerkstelliging van deze side-effects met de x < expr constructie kunnen we het opgeleverde resultaat beschikbaar maken in de rest van het programma main heeft type IO () 37

71 Veel voorkomende structuren in een Haskell programma De functie main heeft type IO () 38

72 Veel voorkomende structuren in een Haskell programma De functie main heeft type IO () Op top-niveau hebben we te maken met de executie van een rij commandos (IO.. waarden) die de control aan elkaar doorgeven. Dit is gepresenteerd door het onder water doorgeven van de World, waarvan er maar één is. 38

73 Veel voorkomende structuren in een Haskell programma De functie main heeft type IO () Op top-niveau hebben we te maken met de executie van een rij commandos (IO.. waarden) die de control aan elkaar doorgeven. Dit is gepresenteerd door het onder water doorgeven van de World, waarvan er maar één is. Dit doorgeven van het stokje maakt dat de input/output actions sequentieel worden afgehandeld. 38

74 Voorbeeldprobleem Schijf een functie posequestions: posequestions :: [String] > IO [Bool] die een lijst vragen meekrijgt, die vragen stelt, een yes/no antwoord accepteerd, and tenslotte de verzamelde antwoorden afdrukt: 39

75 Voorbeeldprobleem Schijf een functie posequestions: posequestions :: [String] > IO [Bool] 39 die een lijst vragen meekrijgt, die vragen stelt, een yes/no antwoord accepteerd, and tenslotte de verzamelde antwoorden afdrukt: Test> posequestion Is it Sunday? (y) of (n)? n Is your name Doaitse? (y) of (n)? y [False,True] Test> ["Is it Sunday?", "Is your name Doaitse?"]

76 Oplossing posequestions :: [String] > IO [Bool] Let the types do the work 40

77 Oplossing posequestions :: [String] > IO [Bool] Let the types do the work posequestions qs = sequence (map posequestion qs) 40

78 Oplossing posequestions :: [String] > IO [Bool] Let the types do the work posequestions qs = sequence (map posequestion qs) posequestion q = do putstrln q putstrln "(y) of (n)?" (v: ) < getline if v == y then return True else if v == n then return False else posequestion q 40

79 Oplossing posequestions :: [String] > IO [Bool] Let the types do the work posequestions qs = sequence (map posequestion qs) posequestion q = do putstrln q putstrln "(y) of (n)?" (v: ) < getline if v == y then return True else if v == n then return False else posequestion q 40 demo qs = do answers < posequestions qs print answers

80 Nogmaals getline We lezen een karakter, gaan in de recusie, en bouwen een resultaat: getline1 = do x < getchar if x == \n then return [ ] else do xs < getline1 return (x : xs) 41

81 Nogmaals getline De meeste mensen hebben de drang het resultaat al te bouwen tijdens het inlezen; daar is de accumulerende parameter weer: getline2 = getline2 [ ] where getline2 r = do x < getchar if x == \n then return r else getline2 (r ++ [x]) 41

82 Nogmaals getline getline3 = getline3 [ ] where getline3 r = do x < getchar if x == \n then return (reverse r) else getline3 (x : r) 41

83 Tot besluit Als je kunt omgaan met file I/O dan ook met globale muteerbare variabelen (MVars) de random functie Hoe kom je van de monad af? Operaties in de IO monad vind je vooral toplevel, want als je I/O functies gebruikt, doe je zelf ook I/O. Maar je kunt eruit ontsnappen met unsafeperformio unsafe in de naam suggereert: use with extreme caution, not during this course 42

Functioneel programmeren

Functioneel programmeren Functioneel programmeren Practicumopgave 2: Mastermind Het doel van deze opgave is het implementeren van het spel Mastermind; zie http://nl.wikipedia.org/wiki/mastermind voor een uitleg. Het spel is klein

Nadere informatie

College Notatie, Recursie, Lijsten

College Notatie, Recursie, Lijsten College 2016-2017 2. Notatie, Recursie, Lijsten Doaitse Swierstra (Jeroen Bransen) Utrecht University September 13, 2016 Functieapplicatie functieapplicatie associeert naar links: als x in f x y moet kiezen

Nadere informatie

College Introductie

College Introductie College 2016-2017 Introductie Doaitse Swierstra (Jeroen Bransen) Utrecht University September 13, 2016 Waarom is FP anders? in plaats van opdrachten die na elkaar moeten worden uitgevoerd, definiëren we

Nadere informatie

inleiding theoretische informatica practicum 1 deadline woensdag 20 februari 2008 om uur

inleiding theoretische informatica practicum 1 deadline woensdag 20 februari 2008 om uur 1 Inleiding inleiding theoretische informatica 2007-2008 practicum 1 deadline woensdag 20 februari 2008 om 14.00 uur Dit practicum is een kennismaking met functioneel programmeren. Twee belangrijke functionele

Nadere informatie

1 Inleiding in Functioneel Programmeren

1 Inleiding in Functioneel Programmeren 1 Inleiding in Functioneel Programmeren door Elroy Jumpertz 1.1 Inleiding Aangezien Informatica een populaire minor is voor wiskundestudenten, leek het mij nuttig om een stukje te schrijven over een onderwerp

Nadere informatie

Inleiding tot Func.oneel Programmeren les 3

Inleiding tot Func.oneel Programmeren les 3 Inleiding tot Func.oneel Programmeren les 3 Kris Luyten, Jo Vermeulen {kris.luyten,jo.vermeulen}@uhasselt.be Exper.secentrum voor Digitale Media Universiteit Hasselt Currying Currying: een func.e met meerdere

Nadere informatie

Een typisch programma in C en C++ bestaat uit een aantal onderdelen:

Een typisch programma in C en C++ bestaat uit een aantal onderdelen: Eerste stappen in C. Een typisch programma in C en C++ bestaat uit een aantal onderdelen: /* Alles wat op meerdere lijnen staat zoals hier is commentaar. */ // Dit is commentaar op 1 lijn. Geldig tot einde

Nadere informatie

Verzamelingen, Lijsten, Functioneel Programmeren

Verzamelingen, Lijsten, Functioneel Programmeren Verzamelingen, Lijsten, Functioneel Programmeren Jan van Eijck jve@cwi.nl Lezing 4e Gymnasium, 19 november 2015 Samenvatting In deze lezing gaan we in op de overeenkomsten en verschillen tussen verzamelingen

Nadere informatie

Haskell: programmeren in een luie, puur functionele taal

Haskell: programmeren in een luie, puur functionele taal Haskell: programmeren in een luie, puur functionele taal Jan van Eijck jve@cwi.nl 5 Talen Symposium, 12 juli 2010 Samenvatting In deze mini-cursus laten we zien hoe je met eindige en oneindige lijsten

Nadere informatie

Wat is FP? The Haskell School of Expression. Functies. Types 1+1=2. Iedere expressie (en waarde) heeft een type.

Wat is FP? The Haskell School of Expression. Functies. Types 1+1=2. Iedere expressie (en waarde) heeft een type. Wat is FP? The Haskell School of Expression Functioneel Programmeren Een andere manier om tegen programmeren aan te kijken Gebaseerd op het uitrekenen van expressies 1+1=2 Eenvoudig maar krachtig (modulair,

Nadere informatie

Controle structuren. Keuze. Herhaling. Het if statement. even1.c : testen of getal even of oneven is. statement1 statement2

Controle structuren. Keuze. Herhaling. Het if statement. even1.c : testen of getal even of oneven is. statement1 statement2 Controle structuren De algemene vorm: 1 bloks door middel van indentatie Keuze Herhaling if expressie :...... In de volgende vorm is het else gedeelte weggelaten: if expressie :... Het if keuze- of conditioneel

Nadere informatie

Programmeermethoden. Recursie. week 11: november kosterswa/pm/

Programmeermethoden. Recursie. week 11: november kosterswa/pm/ Programmeermethoden Recursie week 11: 21 25 november 2016 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Pointers Derde programmeeropgave 1 Het spel Gomoku programmeren we als volgt: week 1: pointerpracticum,

Nadere informatie

Verzamelingen, Lijsten, Functioneel Programmeren

Verzamelingen, Lijsten, Functioneel Programmeren Verzamelingen, Lijsten, Functioneel Programmeren Jan van Eijck jve@cwi.nl Stage Ignatiuscollege, 20 mei 2008 Samenvatting In deze lezing gaan we in op de overeenkomsten en verschillen tussen verzamelingen

Nadere informatie

Verzamelingen, Lijsten, Functioneel Programmeren

Verzamelingen, Lijsten, Functioneel Programmeren Verzamelingen, Lijsten, Functioneel Programmeren Jan van Eijck jve@cwi.nl Stage Ignatiuscollege, 17 mei 2010 Samenvatting In deze lezing gaan we in op de overeenkomsten en verschillen tussen verzamelingen

Nadere informatie

Inleiding Programmeren 2

Inleiding Programmeren 2 Inleiding Programmeren 2 Gertjan van Noord November 26, 2018 Stof week 3 nogmaals Zelle hoofdstuk 8 en recursie Brookshear hoofdstuk 5: Algoritmes Datastructuren: tuples Een geheel andere manier om te

Nadere informatie

Niet-numerieke data-types

Niet-numerieke data-types Intern wordt een karakter voorgesteld als een rij van acht bits, Niet-numerieke data-types string de letter a 01100001 0110 0001 0x61 97 Bij interpretatie van de inhoud van een byte als een geheel getal,

Nadere informatie

UNIVERSITEIT ANTWERPEN FACULTEIT WETENSCHAPPEN DEPARTEMENT WISKUNDE-INFORMATICA OBERON CODE CONVENTIONS

UNIVERSITEIT ANTWERPEN FACULTEIT WETENSCHAPPEN DEPARTEMENT WISKUNDE-INFORMATICA OBERON CODE CONVENTIONS UNIVERSITEIT ANTWERPEN FACULTEIT WETENSCHAPPEN DEPARTEMENT WISKUNDE-INFORMATICA OBERON CODE CONVENTIONS Laatste aanpassing: 15 oktober 2003 Inhoudsopgave 1 Bestandsnamen 3 2 Organizatie Bestanden 3 3 Indentatie

Nadere informatie

Een korte samenvatting van enkele FORTRAN opdrachten

Een korte samenvatting van enkele FORTRAN opdrachten Een korte samenvatting van enkele FORTRAN opdrachten Inhoud 1 Introductie 3 2 De structuur van een FORTRAN programma 3 3 Datatypen, variabelen en declaraties 3 4 Expressies-volgorde van uitwerking 4 5

Nadere informatie

Semantiek (2IT40) Bas Luttik. HG 7.14 tel.: Hoorcollege 8 (7 juni 2007)

Semantiek (2IT40) Bas Luttik.  HG 7.14 tel.: Hoorcollege 8 (7 juni 2007) Bas Luttik s.p.luttik@tue.nl http://www.win.tue.nl/~luttik HG 7.14 tel.: 040 247 5152 Hoorcollege 8 (7 juni 2007) Functionele talen Idee: een programma definieert reeks (wiskundige) functies. Programma

Nadere informatie

Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk.

Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk. HOOFDSTUK 3 3.1 Stapsgewijs programmeren In de vorige hoofdstukken zijn programmeertalen beschreven die imperatief zijn. is het stapsgewijs in code omschrijven wat een programma moet doen, net als een

Nadere informatie

Programmeermethoden. Recursie. Walter Kosters. week 11: november kosterswa/pm/

Programmeermethoden. Recursie. Walter Kosters. week 11: november kosterswa/pm/ Programmeermethoden Recursie Walter Kosters week 11: 20 24 november 2017 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Vierde programmeeropgave 1 De Grote getallen programmeren we als volgt: week 1: pointerpracticum,

Nadere informatie

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 11 december 2015 Ingebouwde datastructuren Meer boomstructuren Access specifiers Gebruikersinvoer Codestijl Packages SAT-solver Ingebouwde datastructuren Ingebouwde

Nadere informatie

Korte uitleg: Wat doet de shell met mijn commandoregel?

Korte uitleg: Wat doet de shell met mijn commandoregel? Korte uitleg: Wat doet de shell met mijn commandoregel? Het onderstaande is heel erg Bash gericht, maar geldt i.h.a. ook voor andere shells. Vooral als het om "begrip" gaat. Iedere regel die aan de shell

Nadere informatie

Programmeren in Java les 3

Programmeren in Java les 3 4 september 2015 Deze les korte herhaling vorige week loops methodes Variabelen Soorten variabelen in Java: integer: een geheel getal, bijv. 1,2,3,4 float: een gebroken getal, bijv. 3.1415 double: een

Nadere informatie

FUNCTIONEEL PROGRAMMEREN WEEK 1

FUNCTIONEEL PROGRAMMEREN WEEK 1 FUNCTIONEEL PROGRAMMEREN WEEK 1 T. Busker Bron: Kris Luyten en Jo Vermeulen - Expertise Centrum voor Digitale Media - Universiteit Hasselt Functioneel programmeren? Alles via functies Alles via expressies

Nadere informatie

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 13 november 2015 Expressies Functies Ingebouwde functies Variabelenbereik Inleveropgave 1 Terugblik Programma is een lijst van opdrachten Terugblik Programma is

Nadere informatie

Datastructuren Programmeeropdracht 3: Expressies. 1 Expressies. Deadline. Dinsdag 8 december 23:59.

Datastructuren Programmeeropdracht 3: Expressies. 1 Expressies. Deadline. Dinsdag 8 december 23:59. Datastructuren 2015 Programmeeropdracht 3: Expressies Deadline. Dinsdag 8 december 23:59. Inleiding. Deze opdracht is losjes gebaseerd op Opdracht 5.13.2 in het boek van Drozdek. U wordt gevraagd expressies

Nadere informatie

start -> id (k (f c s) (g s c)) -> k (f c s) (g s c) -> f c s -> s c

start -> id (k (f c s) (g s c)) -> k (f c s) (g s c) -> f c s -> s c Een Minimaal Formalisme om te Programmeren We hebben gezien dat Turing machines beschouwd kunnen worden als universele computers. D.w.z. dat iedere berekening met natuurlijke getallen die met een computer

Nadere informatie

HOGESCHOOL VAN AMSTERDAM Informatica Opleiding. CPP 1 van 10

HOGESCHOOL VAN AMSTERDAM Informatica Opleiding. CPP 1 van 10 CPP 1 van 10 ADSdt 1-2009 TENTAMENVOORBLAD Voor aanvang van het tentamen s.v.p. de tentamengegevens goed doorlezen om eventuele misverstanden te voorkomen!! Naam student : Studentnummer : Groep : Studieonderdeel

Nadere informatie

Implementatie van Programmeertalen (IPT) 4 mei 2001

Implementatie van Programmeertalen (IPT) 4 mei 2001 Informatica Instituut, Faculteit Wiskunde en Informatica, UU. In elektrosche vorm beschikbaar gemaakt door de TBC van A Eskwadraat. Het college IPT werd in 2000/2001 gegeven door Drs. A. Dijkstra en Drs.

Nadere informatie

Vakgroep CW KAHO Sint-Lieven

Vakgroep CW KAHO Sint-Lieven Vakgroep CW KAHO Sint-Lieven Objecten Programmeren voor de Sport: Een inleiding tot JAVA objecten Wetenschapsweek 20 November 2012 Tony Wauters en Tim Vermeulen tony.wauters@kahosl.be en tim.vermeulen@kahosl.be

Nadere informatie

4 Invoer en uitvoer. 4.1 Toegang tot de standaardbibliotheek

4 Invoer en uitvoer. 4.1 Toegang tot de standaardbibliotheek 4 Invoer en uitvoer Strikt genomen maken invoer- en uitvoerfaciliteiten geen deel uit van de taal C, zoals dat in FORTRAN wel het geval is, waar de statements READ en WRITE als deel van de taal zijn gedefinieerd.

Nadere informatie

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Module 4 Programmeren HOOFDSTUK 3 3.1 Stapsgewijs programmeren De programmeertalen die tot nu toe genoemd zijn, zijn imperatieve of procedurele programmeertalen. is het stapsgewijs in code omschrijven wat een programma moet

Nadere informatie

Zelftest Inleiding Programmeren

Zelftest Inleiding Programmeren Zelftest Inleiding Programmeren Document: n0824test.fm 22/01/2013 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INLEIDING BIJ DE ZELFTEST INLEIDING PROGRAMMEREN Deze

Nadere informatie

Programmeermethoden NA. Week 5: Functies (vervolg)

Programmeermethoden NA. Week 5: Functies (vervolg) Programmeermethoden NA Week 5: Functies (vervolg) Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/prna2016/ Functies Vorige week bekeken we functies: def bereken(a, x): return a * (x

Nadere informatie

7 Omzetten van Recursieve naar Iteratieve Algoritmen

7 Omzetten van Recursieve naar Iteratieve Algoritmen 7 Omzetten van Recursieve naar Iteratieve Algoritmen Het lijkt mogelijk om elke oplossings-algoritme, die vaak in eerste instantie recursief geformuleerd werd, om te zetten in een iteratieve algoritme

Nadere informatie

Het omzetten van reguliere expressies naar eindige automaten, zie de vakken Fundamentele Informatica 1 en 2.

Het omzetten van reguliere expressies naar eindige automaten, zie de vakken Fundamentele Informatica 1 en 2. Datastructuren 2016 Programmeeropdracht 3: Patroonherkenning Deadlines. Woensdag 23 november 23:59, resp. vrijdag 9 december 23:59. Inleiding. Deze opdracht is gebaseerd op Hoofdstuk 13.1.7 in het boek

Nadere informatie

Persistentie via bestanden. Bestanden

Persistentie via bestanden. Bestanden programma is transient Persistentie via bestanden Administratieve gegevens zijn verzameld in het file-object: o.a. waar ergens op de disk de data van het bestand te vinden is. invoer van de gebruiker programma

Nadere informatie

Programmeermethoden NA. Week 5: Functies (vervolg)

Programmeermethoden NA. Week 5: Functies (vervolg) Programmeermethoden NA Week 5: Functies (vervolg) Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/prna/ Bij ons leer je de wereld kennen 1 Functies Vorige week bekeken we functies: def

Nadere informatie

Logisch en Functioneel Programmeren voor Wiskunde D

Logisch en Functioneel Programmeren voor Wiskunde D Logisch en Functioneel Programmeren voor Wiskunde D Wouter Swierstra Doaitse Swierstra Jurriën Stutterheim Technical Report UU-CS-2011-033 Sept 2011 Department of Information and Computing Sciences Utrecht

Nadere informatie

Uitwerking Tweede deeltentamen Imperatief programmeren - versie 1 Vrijdag 21 oktober 2016, uur

Uitwerking Tweede deeltentamen Imperatief programmeren - versie 1 Vrijdag 21 oktober 2016, uur Uitwerking Tweede deeltentamen Imperatief programmeren - versie 1 Vrijdag 21 oktober 2016, 13.00-15.00 uur 1. De situatie die ontstaat door class A : B C D; kan beschreven worden door (a) B is een A (b)

Nadere informatie

Arrays. Complexe datastructuren. Waarom arrays. Geen stijlvol programma:

Arrays. Complexe datastructuren. Waarom arrays. Geen stijlvol programma: Geen stijlvol programma: Complexe datastructuren Arrays vijf verschillende variabelen voor iets dat als één rij getallen bestempeld wordt; onbruikbaar wanneer het over meer getallen (bijvoorbeeld ) gaat.

Nadere informatie

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 6 december 2013 Terugblik Programma en geheugen Opdrachten Variabelen Methoden Objecten Klasse Programma en geheugen Opdrachten Variabelen zijn gegroepeerd in

Nadere informatie

Faculteit Economie en Bedrijfskunde

Faculteit Economie en Bedrijfskunde Faculteit Economie en Bedrijfskunde Op dit voorblad vindt u belangrijke informatie omtrent het tentamen. Voordat u met het tentamen t: lees dit voorblad! Tentamen: V&O IV: Programmeren Tentamendatum &

Nadere informatie

Programmeren A. Genetisch Programma voor het Partitie Probleem. begeleiding:

Programmeren A. Genetisch Programma voor het Partitie Probleem. begeleiding: Programmeren A Genetisch Programma voor het Partitie Probleem begeleiding: Inleiding Het Partitie Probleem luidt als volgt: Gegeven een verzameling van n positieve integers, vindt twee disjuncte deelverzamelingen

Nadere informatie

Cursus Algoritmiek - - - najaar 2005

Cursus Algoritmiek - - - najaar 2005 Cursus Algoritmiek - - - najaar 2005 Practicumopdracht 4 : werken met kale gegevensbestanden 1. Achtergrond In de 2 e en de 3 e practicumopdracht heb je al kennis gemaakt met het via het toetsenbord laten

Nadere informatie

Inleiding Programmeren 2

Inleiding Programmeren 2 Inleiding Programmeren 2 Gertjan van Noord November 19, 2018 Overzicht Grafische programma s en tekstgebaseerde programma s Stijladviezen (Jeff Knupp, Writing Idiomatic Python) File Processing (Zelle 5.9.2)

Nadere informatie

Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI

Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI Tentamen Imperatief en Object-georiënteerd programmeren in Java voor CKI Vrijdag 22 januari 2010 Toelichting Dit is een open boek tentamen. Communicatie en het gebruik van hulpmiddelen zijn niet toegestaan.

Nadere informatie

Opgave 5 Equationeel programmeren

Opgave 5 Equationeel programmeren Opgave 5 Equationeel programmeren Haskell, Monads en Monadïsch parsen Atze van der Ploeg, Jörg Endrullis December 1, 2009 1 Inleiding Haskell We gaan nu programmeren in de puur functionele taal Haskell.

Nadere informatie

Syntax- (compile), runtime- en logische fouten Binaire operatoren

Syntax- (compile), runtime- en logische fouten Binaire operatoren Inhoud Syntax- (compile), runtime- en logische fouten Binaire operatoren Operaties op numerieke datatypen Evaluatie van expressies, bindingssterkte Assignment operaties en short-cut operatoren Controle

Nadere informatie

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 25 november 2015 Herhaling Meer herhaling Recursie Mutuele recursie Objecten Herhaling Fibonacci class Fibonacci { public static void fibonaccitot(int bovengrens)

Nadere informatie

Inleiding Programmeren 2

Inleiding Programmeren 2 Inleiding Programmeren 2 Gertjan van Noord November 28, 2016 Stof week 3 nogmaals Zelle hoofdstuk 8 en recursie Brookshear hoofdstuk 5: Algoritmes Datastructuren: tuples Een geheel andere manier om te

Nadere informatie

Modelleren en Programmeren

Modelleren en Programmeren Modelleren en Programmeren Jeroen Bransen 9 december 2015 Foreach String arrays Boomstructuren Interfaces Ingebouwde datastructuren Quiz Foreach Foreach Speciale versie van for om iets voor alle elementen

Nadere informatie

Turbo Pascal (deel 1)

Turbo Pascal (deel 1) Turbo Pascal (deel 1) MSX CLUB MAGAZINE 34 Erik van Bilsen Scanned, ocr ed and converted to PDF by HansO, 2001 Erik van Bilsen leert u het klappen van de Turbo Pascal zweep. Turbo Pascal toepassen Deze

Nadere informatie

Programmeermethoden NA. Week 6: Lijsten

Programmeermethoden NA. Week 6: Lijsten Programmeermethoden NA Week 6: Lijsten Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/prna2016/ Getal opbouwen Stel je leest losse karakters (waaronder cijfers) en je moet daar een getal

Nadere informatie

Programmeren in C# Samenvatting van C#

Programmeren in C# Samenvatting van C# Programmeren in C# Samenvatting van C# Proceduraal Programmeren Functies (O: void + return, I: referentie of value) Arrays, Lijsten Lussen (for, while, do while) Condities, if-else, switch Variabelen,

Nadere informatie

Week 2 : Hoofdstukken 2 en 6; extra stof: inleiding pointers

Week 2 : Hoofdstukken 2 en 6; extra stof: inleiding pointers Week 2 : Hoofdstukken 2 en 6; extra stof: inleiding pointers Hoofdstuk 6: Beslissingen: if-statement en switch-statement. Inleiding: Condities zijn waar (true) of onwaar (false) In C staat het int-getal

Nadere informatie

Accelerometer project 2010 Microcontroller printje op basis van de NXP-LPC2368

Accelerometer project 2010 Microcontroller printje op basis van de NXP-LPC2368 Accelerometer project 2010 Microcontroller printje op basis van de NXP-LPC2368 Handleiding bij het gebruik van een microcontroller in het Accelerometerproject (Project II) Er zijn speciaal voor het Accelerometerproject

Nadere informatie

Zelftest Programmeren in PL/I

Zelftest Programmeren in PL/I Zelftest Programmeren in PL/I Document: n0830test.fm 26/03/2012 ABIS Training & Consulting P.. Box 220 B-3000 Leuven Belgium TRAINING & CNSULTING INLEIDING BIJ DE ZELFTEST PRGRAMMEREN IN PL/I m de voorkennis

Nadere informatie

Recursion. Introductie 37. Leerkern 37. Terugkoppeling 40. Uitwerking van de opgaven 40

Recursion. Introductie 37. Leerkern 37. Terugkoppeling 40. Uitwerking van de opgaven 40 Recursion Introductie 37 Leerkern 37 5.1 Foundations of recursion 37 5.2 Recursive analysis 37 5.3 Applications of recursion 38 Terugkoppeling 40 Uitwerking van de opgaven 40 Hoofdstuk 5 Recursion I N

Nadere informatie

Variabelen en statements in ActionScript

Variabelen en statements in ActionScript Ontwikkelen van Apps voor ios en Android Variabelen en statements in ActionScript 6.1 Inleiding Als we het in de informatica over variabelen hebben, bedoelen we een stukje in het geheugen van de computer

Nadere informatie

Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2.

Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, , Technische Universiteit Delft, Faculteit EWI, Afdeling 2. Voorbeeldtentamen Inleiding programmeren (IN1608WI), Oktober 2003, 14.00-15.30, Technische Universiteit Delft, Faculteit EWI, Afdeling 2. Dit tentamen bestaat uit twee delen. Deel 1 (14.00-14.45, gesloten

Nadere informatie

Programmeermethoden. Functies vervolg. Walter Kosters. week 5: 1 5 oktober kosterswa/pm/

Programmeermethoden. Functies vervolg. Walter Kosters. week 5: 1 5 oktober kosterswa/pm/ Programmeermethoden Functies vervolg Walter Kosters week 5: 1 5 oktober 2018 www.liacs.leidenuniv.nl/ kosterswa/pm/ 1 Files manipuleren 1 Deze void-functie telt niet-lege regels in een file invoer: void

Nadere informatie

Programmeermethoden NA

Programmeermethoden NA Programmeermethoden NA Week 6: Lijsten Kristian Rietveld http://liacs.leidenuniv.nl/~rietveldkfd/courses/prna/ Bij ons leer je de wereld kennen 1 Getal opbouwen Stel je leest losse karakters (waaronder

Nadere informatie

Deel 1: Arduino kennismaking. Wat is een microcontroller, structuur van een programma, syntax,

Deel 1: Arduino kennismaking. Wat is een microcontroller, structuur van een programma, syntax, Deel 1: Arduino kennismaking Wat is een microcontroller, structuur van een programma, syntax, Wat is een microcontroller Wat is een microcontroller? Microcontroller = kleine dedicated computer. - Beperkt

Nadere informatie

Zoemzinnen. Algemene info. Functies met een variabel aantal argumenten

Zoemzinnen. Algemene info. Functies met een variabel aantal argumenten Zoemzinnen Functies met een variabel aantal argumenten Bij het definiëren van een functie leg je in principe vast hoeveel argumenten er aan de functie moeten doorgegeven worden. Dit aantal correspondeert

Nadere informatie

PYTHON REEKS 1: BASICS. Mathias Polfliet

PYTHON REEKS 1: BASICS. Mathias Polfliet PYTHON REEKS 1: BASICS Mathias Polfliet mpolflie@etrovub.be EENVOUDIGE REKENMACHINE 2 soorten getallen Getallen Z -> integers (gehele getallen) Getallen R -> floating points (reële getallen) Door beperkte

Nadere informatie

Een eenvoudig algoritme om permutaties te genereren

Een eenvoudig algoritme om permutaties te genereren Een eenvoudig algoritme om permutaties te genereren Daniel von Asmuth Inleiding Er zijn in de vakliteratuur verschillende manieren beschreven om alle permutaties van een verzameling te generen. De methoden

Nadere informatie

II. ZELFGEDEFINIEERDE FUNCTIES

II. ZELFGEDEFINIEERDE FUNCTIES II. ZELFGEDEFINIEERDE FUNCTIES In Excel bestaat reeds een uitgebreide reeks van functies zoals SOM, GEMIDDELDE, AFRONDEN, NU enz. Het is de bedoeling om functies aan deze lijst toe te voegen door in Visual

Nadere informatie

Derde college algoritmiek. 23 februari Complexiteit Toestand-actie-ruimte

Derde college algoritmiek. 23 februari Complexiteit Toestand-actie-ruimte Algoritmiek 2018/Complexiteit Derde college algoritmiek 2 februari 2018 Complexiteit Toestand-actie-ruimte 1 Algoritmiek 2018/Complexiteit Tijdcomplexiteit Complexiteit (= tijdcomplexiteit) van een algoritme:

Nadere informatie

Constanten. Variabelen. Expressies. Variabelen. Constanten. Voorbeeld : varid.py. een symbolische naam voor een object.

Constanten. Variabelen. Expressies. Variabelen. Constanten. Voorbeeld : varid.py. een symbolische naam voor een object. een symbolische naam voor een object. Variabelen Constanten Variabelen Expressies naam : geeft de plaats in het geheugen aan waarde : de inhoud van het object identifier : een rij van letters en/of cijfers

Nadere informatie

Zelftest TSO/E REXX. Document: n0167test.fm 25/01/2017. ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium

Zelftest TSO/E REXX. Document: n0167test.fm 25/01/2017. ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium Zelftest TSO/E REXX Document: n0167test.fm 25/01/2017 ABIS Training & Consulting P.O. Box 220 B-3000 Leuven Belgium TRAINING & CONSULTING INLEIDING BIJ DE ZELFTEST TSO/E REXX Deze test is een hulpmiddel

Nadere informatie

[15] Variabelen in functies (of: een woordje over scope)

[15] Variabelen in functies (of: een woordje over scope) [15] Variabelen in functies (of: een woordje over scope) In de vorige leerfiche hebben we geleerd over functies. We leerden dat functies parameters hebben en dat ze return-waarden kunnen teruggeven aan

Nadere informatie

Opgaven Registers Concurrency, 29 nov 2018, Werkgroep.

Opgaven Registers Concurrency, 29 nov 2018, Werkgroep. Opgaven Registers Concurrency, 29 nov 2018, Werkgroep. Gebruik deze opgaven om de stof te oefenen op het werkcollege. Cijfer: Op een toets krijg je meestal zes tot acht opgaven. 1. Safe Integer: Van een

Nadere informatie

continue in een for, while of do lus herhaalt de lus vroegtijdig. De volgende herhaling wordt onmiddellijk begonnen.

continue in een for, while of do lus herhaalt de lus vroegtijdig. De volgende herhaling wordt onmiddellijk begonnen. Hoofdstuk 3: controlestructuren instructies en blokken Naar elke instructie staat een ; Instructies worden door de haakjes {} in een block samengevat. if else if ( expression) statement1; else statement2;

Nadere informatie

Zelftest Programmeren in COBOL - deel I

Zelftest Programmeren in COBOL - deel I Zelftest Programmeren in CBL - deel I Document: n1290test.fm 05/01/2016 ABIS Training & Consulting P.. Box 220 B-3000 Leuven Belgium TRAINING & CNSULTING INLEIDING BIJ DE ZELFTEST PRGRAMMEREN IN CBL -

Nadere informatie

Waarden persistent (blijvend) opslaan gaat in bestanden (files). Lege tekst: eof

Waarden persistent (blijvend) opslaan gaat in bestanden (files). Lege tekst: eof Programmeren Blok A Persistente opslag van waarden http://www.win.tue.nl/ wstomv/edu/2ip05/ College 4 Tom Verhoeff Technische Universiteit Eindhoven Faculteit Wiskunde en Informatica Software Engineering

Nadere informatie

Je gaat leren programmeren en een spel bouwen met de programmeertaal Python. Websites zoals YouTube en Instagram zijn gebouwd met Python.

Je gaat leren programmeren en een spel bouwen met de programmeertaal Python. Websites zoals YouTube en Instagram zijn gebouwd met Python. 1 Je gaat leren programmeren en een spel bouwen met de programmeertaal Python. Websites zoals YouTube en Instagram zijn gebouwd met Python. Voordat je leert programmeren, moet je jouw pc zo instellen dat

Nadere informatie

Computerarchitectuur en netwerken. Memory management Assembler programmering

Computerarchitectuur en netwerken. Memory management Assembler programmering Computerarchitectuur en netwerken 2 Memory management Assembler programmering Lennart Herlaar 10 september 2018 Inhoud 1 Protectie: Hoe het O.S. programma s tegen elkaar kan beschermen modes memory management

Nadere informatie

Inleiding programmeren

Inleiding programmeren Inleiding programmeren Docent: José Lagerberg Assistenten: Robin de Vries, Jordy Perlee, Dimitri Belfor, Stephen Swatman, Erik Kooistra, Daan Kruis, Daniel Louwrink Cursusinformatie: https://staff.fnwi.uva.nl/j.m.lagerberg

Nadere informatie

Practicumopgave 3: SAT-solver

Practicumopgave 3: SAT-solver Practicumopgave 3: SAT-solver Modelleren en Programmeren 2015/2016 Deadline: donderdag 7 januari 2016, 23:59 Introductie In het vak Inleiding Logica is onder andere de propositielogica behandeld. Veel

Nadere informatie

10 Meer over functies

10 Meer over functies 10 Meer over functies In hoofdstuk 5 hebben we functies uitgebreid bestudeerd. In dit hoofdstuk bekijken we drie andere aspecten van functies: recursieve functies dat wil zeggen, functies die zichzelf

Nadere informatie

Practicum Ox intro. Practicum Ox intro. VU Numeriek Programmeren 2.5. Charles Bos. Vrije Universiteit Amsterdam. 3 april /18

Practicum Ox intro. Practicum Ox intro. VU Numeriek Programmeren 2.5. Charles Bos. Vrije Universiteit Amsterdam. 3 april /18 1/18 VU Numeriek Programmeren 2.5 Charles Bos Vrije Universiteit Amsterdam 3 april 2013 2/18 Overzicht Vlotte intro in Ox Hands on 3/18 Minimale elementen Minimale elementen Ox-programma: voeg de standaard

Nadere informatie

2IA05 Functioneel Programmeren

2IA05 Functioneel Programmeren 2IA05 Functioneel Programmeren wk1: Introductie Rik van Geldrop, Jaap van der Woude Declaratieve programmeerstijl 2/20 2 H C H = A A H I JE A 1 F A H = JEA B, A? = H = JEA B D A M = J. K? JE A A C EI?

Nadere informatie

Elfde college complexiteit. 23 april NP-volledigheid III

Elfde college complexiteit. 23 april NP-volledigheid III college 11 Elfde college complexiteit 23 april 2019 NP-volledigheid III 1 TSP Als voorbeeld bekijken we het Travelling Salesman/person Problem, ofwel het Handelsreizigersprobleem TSP. Hiervoor geldt: TSP

Nadere informatie

Deeltentamen Grammatica s en ontleden 22 december 2005

Deeltentamen Grammatica s en ontleden 22 december 2005 Tentamen Grammatica s en ontleden 22 december 2005 1 Deeltentamen Grammatica s en ontleden 22 december 2005 Let op: opgave 1 t/m 4 tellen voor (slechts) 5 punten mee, opgave 5 voor maar liefst 50 punten,

Nadere informatie

Leren Programmeren met Visual Basic 6.0 Les 3+4. Hoofdstuk 4 : De Selectie

Leren Programmeren met Visual Basic 6.0 Les 3+4. Hoofdstuk 4 : De Selectie Leren Programmeren met Visual Basic 6.0 Les 3+4 Hoofdstuk 4 : De Selectie Visual Basic 6.0 1 Basisstructuren (herhaling) Sequentie (HK2) : Alle opdrachten gewoon na mekaar uitvoeren. Hier worden geen keuzes

Nadere informatie

Tentamen Programmeren in C (EE1400)

Tentamen Programmeren in C (EE1400) TU Delft Tentamen Programmeren in C (EE1400) 5 april 2012, 9.00 12.00 Faculteit EWI - Zet op elk antwoordblad je naam en studienummer. - Beantwoord alle vragen zo nauwkeurig mogelijk. - Wanneer C code

Nadere informatie

Lab Webdesign: Javascript 3 maart 2008

Lab Webdesign: Javascript 3 maart 2008 H5: OPERATORS In dit hoofdstuk zullen we het hebben over de operators (of ook wel: operatoren) in JavaScript waarmee allerlei rekenkundige en logische bewerkingen kunnen worden uitgevoerd. Daarbij zullen

Nadere informatie

recursie Hoofdstuk 5 Studeeraanwijzingen De studielast van deze leereenheid bedraagt circa 6 uur. Terminologie

recursie Hoofdstuk 5 Studeeraanwijzingen De studielast van deze leereenheid bedraagt circa 6 uur. Terminologie Hoofdstuk 5 Recursion I N T R O D U C T I E Veel methoden die we op een datastructuur aan kunnen roepen, zullen op een recursieve wijze geïmplementeerd worden. Recursie is een techniek waarbij een vraagstuk

Nadere informatie

DOMjudge teamhandleiding

DOMjudge teamhandleiding judge DOMjudge teamhandleiding Samenvatting /\ DOM DOM judge Hieronder staat de belangrijkste informatie kort samengevat. Dit is bedoeld om snel aan de slag te kunnen. We raden echter ten zeerste aan dat

Nadere informatie

Tentamen Programmeren in C (EE1400)

Tentamen Programmeren in C (EE1400) TU Delft Tentamen Programmeren in C (EE1400) 3 feb. 2012, 9.00 12.00 Faculteit EWI - Zet op elk antwoordblad je naam en studienummer. - Beantwoord alle vragen zo nauwkeurig mogelijk. - Wanneer C code gevraagd

Nadere informatie

APPLICATIEBOUW 3E COLLEGE: OBJECT GEORIËNTEERD PROGRAMMEREN, METHODEN, PARAMETERS, SCOPE VAN VARIABELEN. Onderdeel van SmartProducts

APPLICATIEBOUW 3E COLLEGE: OBJECT GEORIËNTEERD PROGRAMMEREN, METHODEN, PARAMETERS, SCOPE VAN VARIABELEN. Onderdeel van SmartProducts APPLICATIEBOUW 3E COLLEGE: OBJECT GEORIËNTEERD PROGRAMMEREN, METHODEN, PARAMETERS, SCOPE VAN VARIABELEN Onderdeel van SmartProducts INHOUD COLLEGE 3 Scope van variabelen {3.9} Class ontwerpen en maken,

Nadere informatie

import java.io.*; één klasse public class Hallo { public static void main (String[] a) ...met één functie System.out.println("Hallo!

import java.io.*; één klasse public class Hallo { public static void main (String[] a) ...met één functie System.out.println(Hallo! Voorbeeld Java-programma import java.io.*; één klasse...met één functie...met één opdracht public class Hallo { public static void main (String[] a) { System.out.println("Hallo!"); accolades begrenzen

Nadere informatie

Algoritmen en Datastructuren 1. Functies

Algoritmen en Datastructuren 1. Functies Algoritmen en Datastructuren 1 Functies Rad van Fortuin score = 0 huidigespeler++ draai rad bankroet verlies beurt joker huidigespeler++ jokers++ rad else score += bedrag * k rad/klinker toon gok medeklinker

Nadere informatie

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, 13.30 15.30 uur

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, 13.30 15.30 uur Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, 13.30 15.30 uur 1. deze opgave telt voor 30% van het totaal. Schrijf een compleet programma, dat door de gebruiker vanaf

Nadere informatie

Python. Vraag 1: Expressies en types. Vraag 1 b: Types -Ingebouwde functies- Vraag 1 a 3/10/14

Python. Vraag 1: Expressies en types. Vraag 1 b: Types -Ingebouwde functies- Vraag 1 a 3/10/14 Python Vraag 1: Expressies en types Integrated Development Environment (IDE): Ø Wing 101 (gratis te downloaden op www.wingware.com) Oefeningen in de shell >> noemen we de prompt Python commando s = expressies

Nadere informatie

Thinking of Development

Thinking of Development Thinking of Development College 2 Imperatief programmeren Arjan Scherpenisse arjan.scherpenisse@kmt.hku.nl @acscherp Dit college Programmeren, wat is dat dan? De programmeur als vormgever Pseudocode Scratch

Nadere informatie

[14] Functies. Volg mee via 14_Functies-1.py. We beginnen met een eenvoudig voorbeeldje:

[14] Functies. Volg mee via 14_Functies-1.py. We beginnen met een eenvoudig voorbeeldje: [14] Functies Een goede programmeur doet altijd zijn best om zoveel mogelijk aan hergebruik van code te doen. Je probeert in je programma code te gebruiken die iemand anders heeft gemaakt, of code die

Nadere informatie

DOMjudge teamhandleiding

DOMjudge teamhandleiding judge DOMjudge teamhandleiding Samenvatting /\ DOM DOM judge Hieronder staat de belangrijkste informatie kort samengevat. Dit is bedoeld om snel aan de slag te kunnen. We raden echter ten zeerste aan dat

Nadere informatie