Inleiding tot Func.oneel Programmeren
|
|
- Karolien Verlinden
- 8 jaren geleden
- Aantal bezoeken:
Transcriptie
1 Inleiding tot Func.oneel Programmeren Kris Luyten, Jo Vermeulen Exper.secentrum voor Digitale Media Universiteit Hasselt
2 Wat is func.oneel programmeren? Alles via func&es
3 Wat is func.oneel programmeren? Alles via expressies die geëvalueerd worden
4 Wat is func.oneel programmeren? volgende 5 = 6
5 Wat is func.oneel programmeren? volgende x = x+1
6 Wat is func.oneel programmeren? volgende :: Integer - > Integer volgende x = x+1
7 Wat is func.oneel programmeren? volgende :: Integer - > Integer volgende x = x+1 Type signature declara&on Func&on Defini&on
8 Wat is func.oneel programmeren? fac 5 = 5 * 4 * 3 * 2 * 1 fac 4 = 4 * 3 * 2 * 1
9 Wat is func.oneel programmeren? fac 5 = 5 * 4 * 3 * 2 * 1 fac 4 = 4 * 3 * 2 * 1
10 Wat is func.oneel programmeren? fac 5 = 5 * (fac 4) fac 4 = 4 * 3 * 2 * 1
11 Wat is func.oneel programmeren? fac 5 = 5 * (fac 4) fac 4 = 4 * 3 * 2 * 1 fac n = n * (n- 1) * (n- 2) * * 2 * 1 fac n = n * fac (n- 1)
12 Wat is func.oneel programmeren? fac 5 = 5 * (fac 4) fac 4 = 4 * 3 * 2 * 1 fac n = n * (n- 1) * (n- 2) * * 2 * 1 fac :: Int - > Int fac n = n * fac (n- 1)
13 Waarom func.oneel programmeren? Anders leren denken.
14 Waarom func.oneel programmeren? Anders leren denken. Beter Programmeren Efficiënter Leesbaarder
15 Waarom func.oneel programmeren? LISP is worth learning for a different reason the profound enlightenment experience you will have when you finally get it. That experience will make you a beger programmer for the rest of your days, even if you never actually use LISP itself a lot. Eric S. Raymond SQL, Lisp, and Haskell are the only programming languages that I've seen where one spends more &me thinking than typing. Philip Greenspun I do not know if learning Haskell will get you a job. I know it will make you a beger sorware developer. Larry O Brien
16 Waarom func.oneel programmeren? Programmeren met func.es Geen side effects Geen expliciete toekenning van waardes aan variabelen x := 4; x:= x + 9; Gebaseerd op een goed gedefinieerde wiskundige basis (bijv. de lambda calculus) Idempotente uitvoering van func.es Opnieuw uitvoeren geee hetzelfde effect
17 Waarom func.oneel programmeren? Programmeren met func.es Geen side effects Geen expliciete toekenning van waardes aan variabelen x := 4; x:= x + 9; update Gebaseerd op een goed gedefinieerde wiskundige basis (bijv. de lambda calculus) Idempotente uitvoering van func.es Opnieuw uitvoeren geee hetzelfde effect Destruc&ve
18 Waarom func.oneel programmeren? Eenvoudig programmeerparadigma Ingebouwde abstrac.e inclusief data abstrac.e (ADT) Krach.ge ondersteuning voor genericiteit, polymorfisme en overloading
19 Waarom func.oneel programmeren? Correctheid Paralleliseerbaarheid Expressiviteit Modulariteit
20 Waarom func.oneel programmeren? Paralleliseerbaarheid Mul&- core Cloud compu&ng
21 Waarom func.oneel programmeren? Betere modulariteit Hogere orde func.es Func&es met func&es als input / output Luie evalua.e Berekening uitstellen tot resultaat nodig is
22 Waarom func.oneel programmeren? Betere modulariteit Hogere orde func.es Func&es met func&es als input / output Luie evalua.e Berekening uitstellen tot resultaat nodig is
23 Waarom func.oneel programmeren? Toenemend belang in verschillende domeinen Soeware engineering Web applica.es (Map/Reduce, Hadoop, CouchDB) Impera.eve en object- georienteerde programmeertalen (Python, Ruby, C#, Java, JavaScript) Opkomende func.onele talen (F#, Scala, Clojure)
24 C# LINQ (.NET) int somevalue = 5; var results = from c in SomeCollection where c.someproperty < somevalue * 2 select new {c.someproperty, c.otherproperty}; foreach (var result in results) { Console.WriteLine(result); } hpp://en.wikipedia.org/wiki/language_integrated_query
25 Python >>> vec = [2, 4, 6] >>> [3*x for x in vec] [6, 12, 18] >>> def mul9(x): return x % 9 == 0... >>> filter(mul9, vec) [18] hpp://en.wikipedia.org/wiki/language_integrated_query
26 backend Func&onele programmeertaal bovenop de Java VM hpp:// hpp:// lang.org
27 Welke talen zijn er? Ik wil func.oneel programmeren,met welke taal begin ik? Lisp, Scheme, Guile ML, Haskell, Ocaml, Scala, Clojure, Mozart/Oz, Mercury, Ruby, Python, C, Java, XSLT Talen verschillen in zuiverheid. bv. Scheme is niet side- effect free
28 Welke taal gebruiken wij? Haskell hpp:// Een luie en zuiver func.onele programmeertaal
29 Lui? List makelist() { List current = new List(); } current.value = 1; current.next = makelist(); return current; Oneindige lus! makelist().getitem(10);
30 Lui? makelist = 1 : makelist print makelist[10] makelist maakt enkel de 10 eerste items aan Haskell gebruikt call- by- need seman&ek (zie later)
31 Zuiver? Geen side effects Een func.e die opgeroepen wordt met dezelfde parameters als voorheen zal gegarandeerd hetzelfde resultaat teruggeven Referen.al transparancy (func.e en resultaat zijn uitwisselbaar) Houdt zich strikt aan de lambda calculus
32 Nog wat specifieke Haskell eigenschappen Case- sensi.ve Func.enamen starten al.jd met kleine leper Typenamen starten al.jd met een grote leper Indenta.e
33 Soeware ghc (compiler) ghci (interac.eve shell) Hugs (interpreter) hlint (code beau.fier) hoogle (API documtenta.e search engine)
34 Haskell Plauorm hpp://hackage.haskell.org/plauorm/
35 GHC Compiler: Schrijf Haskell programma en bewaar in een.hs bestand Compileer met: ghc o naam naam.hs Voer./naam uit Interpreter Start ghci naam.hs Of :load naam.hs als ghci opgestart is Verlaat de shell met :quit
36 Hallo Wereld hallo.hs main = putstrln Hallo Wereld! console $> ghc o hallo hallo.hs! $>./hallo! Hallo Wereld! $>!
37 fac fac.hs fac n = if n==0 then 1 else n * fac (n-1)! main = print (fac 42)! console $> ghc o fac fac.hs! $>./fac! $> !
38 ifac.hs fac fac 0 = 1! fac n = n * fac (n-1)! main = do!!putstrln in:"!!nummer <- getline!!print (fac (read nummer))!! console $> ghc o ifac ifac.hs! $>./ifac! $> in: 20! ! Wat code om user input te ondersteunen
39 ifac.hs fac fac 0 = 1! fac n = n * fac (n-1)! main = do!!putstrln in:"!!nummer <- getline!!print (fac (read nummer))!! console $> ghc o ifac ifac.hs! $>./ifac! $> in: 20! ! Read zorgt voor automa&sche type conversie
40 fac fac.hs fac 0 = 1! fac n = n * fac (n-1)! main = print (fac 42)! Met pagern matching console $> ghc o fac fac.hs! $>./fac! $> !
41 Basis bewerkingen Interac.ve shell: ghci Prelude>5*2+8! 18! Prelude>sqrt 25! 5! Prelude>sqrt 2! ! Prelude>5*(2+8)! 50!!
42 Paren en Triples Interac.ve shell Prelude>(8,20)! (8,20)! Prelude>(1,3,5)! (1,3,5)! Prelude>fst ( nul,0)! nul! Prelude>snd ( nul,0)! 0!! First Second
43 Lijsten Interac.ve shell Element toevoegen met cons (:) operator Prelude>[1,3,5]! [1,3,5]! Prelude>0:[1,3,5]! [0,1,3,5]! Prelude>0:1:3:5:[]! [0,1,3,5]! Prelude>[(1,1),(2,3),(4,8),(9,999)]! [(1,1),(2,3),(4,8),(9,999)]!!
44 Lijsten Interac.ve shell Prelude>head [1,3,5]! 1! Prelude>tail [1,3,5]! [3,5]! Prelude>length [(1,1),(2,3),(4,8),(9,999)]! 4! Prelude>length (tail [1,3,5,9,4,8,999])! 6!!!
45 Strings Prelude> h : a : l : l : o :[]! hallo! Prelude> hallo wereld! hallo wereld! Prelude> 2 maal 5 is ++ show (2*5)! 2 maal 5 is 10!!! Interac.ve shell show zorgt voor type conversie
46 Concatena.e ++ concateneert twee lijsten? (x:xs) ++ (y:ys)? [] ++ []? x ++ y? (x:xs) ++ y? (x:xs) ++ (y:[]) : voegt een element toe vooraan een lijst? x: [a,b,c]? x:(y:xs)? (y:xs):x Probeer de voorbeeldjes uit met ghci. Wat werkt er en wat niet?
47 length length.hs Met pagern matching length :: [a] -> Int! length [] = 0! length (x:xs) = 1 + length xs! main = print (length [1,2,3,4,5,6,7,8])! console $> ghc o length length.hs! $>./length! $> 8!
48 zip zip :: [a]- >[b]- >[(a,b)] zip [] ys = [] zip xs [] = [] zip (x:xs) (y:ys) = (x,y) : zip xs ys zip voegt elementen van twee lijsten paarsgewijs samen in een nieuwe lijst
49 Signatures lezen zip :: [a]- >[b]- >[(a,b)] Input: twee lijsten [a] en [b] Output: nieuwe lijst van tuples [(a,b)] uit [a] en [b]
50 zip zip :: [a]- >[b]- >[(a,b)] zip (x:xs) (y:ys) = (x,y) : zip xs ys zip xs ys = [] zip voegt elementen van twee lijsten paarsgewijs samen in een nieuwe lijst
51 - - geee een regel commentaar aan zip zipit.hs -- zip is reeds gedefinieerd in prelude! -- zip (x:xs) (y:ys) = (x,y) : zip xs ys! -- zip xs ys = []! main = print ( zip [2,4,7,5] [1,0,4,8,37,25])! console $> ghc o zipit zipit.hs! $>./zip! $> [(2,1),(4,0),(7,4),(5,8)]!
52 foldr Pas opera.e toe op de elementen van een lijst Opera.es zijn eerste klasse waardes in een func.onele programmeertaal! foldr vervangt : door een opera.e en [] door een ini.eel element foldr is rechts- associa.ef foldr!! + 100! 1:0:3:5:10:[]!!! !! 119!!
53 foldr is een hogere orde func&e Interac.ve shell Prelude>foldr (*) 1 [2,5,4]! 40! Prelude>foldr (-) 2 [10,4,3]! 7!! foldr :: (a - > b - > b) - > b - > [a] - > b foldr op u [] = u foldr op u (x:xs) = op x (foldr op u xs) foldr is rechts associa&ef hgp://foldr.com
54 foldr is een hogere orde func&e Interac.ve shell Prelude>foldr (*) 1 [2,5,4]! 40! Prelude>foldr (-) 2 [10,4,3]! 7!!? foldr :: (a - > b - > b) - > b - > [a] - > b foldr op u [] = u foldr op u (x:xs) = op x (foldr op u xs) foldr is rechts associa&ef hgp://foldr.com
55 foldr foldr (- ) 2 [10,4,3] 10 - (foldr (- ) 2 [4,3]) 10 - (4 - (foldr (- ) 2 [3])) 10 - (4 - (3 - (foldr (- ) 2 []))) 10 - (4 - (3-2)) 10 - (4-1) !! + associa&ef - niet
56 foldl Interac.ve shell Prelude>foldl (*) 1 [2,5,4]! 40! Prelude>foldl (-) 2 [10,4,3]! 7!! foldl :: (a - > b - > a) - > a - > [b] - > a foldl op u [] = u foldl op u (x:xs) = foldl op (op u x) xs foldl is links associa&ef hgp://foldl.com
57 foldl foldl (- ) 2 [10,4,3] foldl (- ) (2-10) [4,3] foldl (- ) ((2-10)- 4) [3] foldl (- ) (((2-10)- 4)- 3) [] ((2-10)- 4)- 3 (- 8-4) ! - niet associa&ef
58 map map :: (a- >b) - > [a] - > [b] map f [] = [] map f (x:xs) = f x : map f xs Map past een func&e toe op elk element van een lijst
59 map Func&e als argument map :: (a- >b) - > [a] - > [b] map f [] = [] map f (x:xs) = f x : map f xs Map past een func&e toe op elk element van een lijst
60 map map :: (a- >b) - > [a] - > [b] map f [] = [] Func&e mapt een type a naar type b map f (x:xs) = f x : map f xs Map past een func&e toe op elk element van een lijst
61 map map :: (a- >b) - > [a] - > [b] map f [] = [] Lijst met elementen van type a wordt omgezet naar lijst met elementen van type b map f (x:xs) = f x : map f xs Map past een func&e toe op elk element van een lijst
62 map map.hs add x y = x + y! main = print (map (add 1) [3,4,5,6,7,8])! console $> ghc o map map.hs! $>./map! $> [4,5,6,7,8,9]!
63 map map2.hs main = print (map fac [0,1,4,5,3,2])! console $> ghc o map2 map2.hs! $>./map2! $> [1,1,24,120,6,2]!
64 Quicksort in twee regels quicksort.hs qsort :: [Int] -> [Int]! qsort [] = []! qsort (x:xs)!!= qsort [y y<-xs, y<=x] ++ [x] ++! qsort [y y<-xs, y>x]!! main = print (qsort [-4,5,9,9,1,25,6,3])! console $> ghc o quicksort quicksort.hs! $>./quicksort! $> [-4,1,3,5,6,9,9,25]!
65 Quicksort
66 Quicksort in twee regels qsort :: [Int] -> [Int]! qsort [] = []! qsort (x:xs)!!= qsort [y y<-xs, y<=x] ++ [x] ++!!!qsort [y y<-xs, y>x]!! main = print (qsort [-4,5,9,9,1,25,6,3])! Een lege rij sorteren geee een lege rij
67 Quicksort in twee regels qsort :: [Int] -> [Int]! qsort [] = []! qsort (x:xs)!!= qsort [y y<-xs, y<=x] ++ [x] ++!!!qsort [y y<-xs, y>x]!! main = print (qsort [-4,5,9,9,1,25,6,3])! Als er elementen in de rij zipen: neem het eerste als spil
68 Quicksort in twee regels qsort :: [Int] -> [Int]! qsort [] = []! qsort (x:xs)!!= qsort [y y<-xs, y<=x] ++! [x] ++!!!qsort [y y<-xs, y>x]!! main = print (qsort [-4,5,9,9,1,25,6,3])! List comprehension Neem alle elementen uit xs die kleiner of gelijk zijn aan x
69 compr.hs List comprehension isveelvoudvandrie :: Int -> Bool! isveelvoudvandrie x = (x `mod` 3 == 0)! main = print ([x x<-[1,8,9,999,5,6,2718]!!!!!!!!,!!!!!!! isveelvoudvandrie x)! console $> ghc o compr compr.hs! $>./compr! $> [9,999,6,2718]!
70 sqrtpairs.hs List comprehension sqrtpairs :: [Int]->[Int]->[(Int,Int)]! sqrtpairs l r = [ (x,y) x <- l, y <-r,!!!!!!!!!!!!!x*x==y ]! main = print ( sqrtpairs [1,0,2,4,7,5] [1,0,4,8,37,25])! console $> ghc o sqrtpairs sqrtpairs.hs! $>./sqrtpairs! $> [(1,1),(0,0),(2,4),(5,25)]!
71 sqrtpairs2.hs List comprehension sqrtpairs :: [Int]->[Int]->[(Int,Int)]! sqrtpairs l r = [ (x,y) x <- l, y <-r,!!!!!!!!!!!!!x*x==y, y>x ]! main = print ( sqrtpairs [1,0,2,4,7,5] [1,0,4,8,37,25])! console $> ghc o sqrtpairs2 sqrtpairs2.hs! $>./sqrtpairs2! $> [(2,4),(5,25)]!
72 sqrtpairs3.hs List comprehension sqrtpairs :: [Int]->[Int]->[(Int,Int)]! sqrtpairs l r = [ ((x*2),(y*3))!!!!!!!!!!!x <- l, y <-r,!!!!!!!!!!!!x*x==y, y>x ]! main = print ( sqrtpairs [1,0,2,4,7,5] [1,0,4,8,37,25])! console $> ghc o sqrtpairs3 sqrtpairs3.hs! $>./sqrtpairs3! $> [(4,12),(10,75)]!
73 Guards: switch met papern matching Condi.es in de func.e Gelijkaardig met een switch statement in C mijnmax.hs mijnmax :: Int -> Int -> Int! mijnmax x y!!! x >= y!!!= x!!! otherwise!= y! Evalua.e gebeurt na papern matching!
74 Guards: switch met papern matching mijnmax.hs mijnmax :: Int -> Int -> Int! mijnmax x y!!! x >= y!!!= x!!! otherwise!= y! Condi0e De expressie achter de condi.e wordt uitgevoerd als de condi.e waar is Als geen van de voorgaande condi.es als waar evalueert
75 Guards: switch met papern matching facg.hs fac n!! n==0 = 1!! otherwise = n * fac (n-1)! main = print (fac 42)! Met guards console $> ghc o facg facg.hs! $>./fac! $> ! Op hoeveel manieren kan men deze func.e wel niet schrijven? hpp://
76 Guards: switch met papern matching functie_naam functie_args!!! guard1 = expressie_bij_guard1!! guard2 = expressie_bij_guard2!! guard3 = expressie_bij_guard1!!!! otherwise = expressie_bij_otherwise!! Betekent dus hetzelfde als functie_naam functie_args!!!if guard1 then expressie_bij_guard1!!else if guard2 then expressie_bij_guard2!!else if guard3 then expressie_bij_guard1!!!!else expressie_bij_otherwise!
77 iets moeilijker: priemfactorisa.e priemfact.hs import System.IO! -- van haskell.org!! primefactors :: Int -> [Int]! primefactors n = primefactors2 n 2!! primefactors2 :: Int -> Int -> [Int]! primefactors2 1 _ = []! primefactors2 n factor! n `mod` factor == 0 = factor :!!! primefactors2 (n `div` factor) factor! otherwise = primefactors2 n (factor + 1)!! main = do!!putstrln "Geef een geheel getal:"!!nummer <- getline!!print ( primefactors (read nummer) )!
78 maar nog steeds makkelijker dan in een impera.eve taal! import System.IO! -- van haskell.org!! vooraan de lijst primefactors :: Int -> [Int]! primefactors n = primefactors2 n 2!! primefactors2 :: Int -> Int -> [Int]! primefactors2 1 _ = []! primefactors2 n factor! n `mod` factor == 0 = factor :!!! primefactors2 (n `div` factor) factor! otherwise = primefactors2 n (factor + 1)!! main = do! priemfact.hs Deler gevonden: voeg toe!putstrln "Geef een geheel getal:"!!nummer <- getline!!print ( primefactors (read nummer) )! Neem het volgende getal (n/f) en voer daarmee de factorisa.e verder uit Anders: probeer volgende getal als deler
79 Prelude.hs De standaard Haskell library met een schat aan voorgedefinieerde func.es hpp://haskell.org/ghc/docs/latest/html/libraries/ base/prelude.html Ook handig om zelf Haskell mee te leren
80 Types Karakters en Strings Numerieke types: Integer, Float, Boolean: True en False Logische en: &&, logische of: en nega.e: not Polymorfe types a Worden afgeleid door Haskell zelf Types makkelijk uitbreidbaar dankzij type classes (behandelen we niet)
81 console Types :t vraagt het type op in de interac.eve shell $> ghci! Prelude> :t 42! 42 :: (Num t) => t! Prelude> :t "Hallo"! "Hallo" :: [Char]! Prelude> :t ! :: (Fractional t) => t! Prelude> :t x! Prelude> :t [1,2,45]! [1,2,45] :: (Num t) => [t]! Prelude> :t [1,2,45.4]! [1,2,45.4] :: (Fractional t) => [t]! Prelude> :t ["hallo", "h"]! ["hallo", "h"] :: [[Char]]! Prelude> :t ['h','a','l','l','o']! ['h','a','l','l','o'] :: [Char]!!
82 Currying Currying: een func.e met meerdere parameters omzepen naar verschillende func.es met telkens 1 parameter f x y = z (f x) y = z f x = \y - > z ((f x) y) = z f = \x - > \y - > z f: (X Y) Z f: X (Y Z)
83 Currying Som :: (Int,Int)- >Int kan Som :: Int- >Int- >Int worden Som 5 6 is een func.e, maar Som 5 kan evengoed gebruikt worden als argument voor een andere func.e (bijv. de map func.e) Func.es worden beter herbruikbaar - Par.ële func.es als argument - Func.es samenstellen (f en g wordt f.g)
84 Evalua.e Strategie Op welke manier wordt een expressie geëvalueerd? De manier waarop argumenten van een func.e worden geëvalueerd bij een func.e- oproep. Strikte versus niet- strikte evalua.e Strikt: parameters func.e wordt geëvalueerd voor uitvoering func.e Niet- strikt: parameters func.e worden niet geëvalueerd tenzij deze gebruikt worden. Evalua.e van de parameters gebeurt dan niet noodzakelijk voor de uitvoering van de func.e
85 Strikte evalua.e Call- by- Value: parameter expressies worden geëvalueerd en toegekend aan een variabele naam (copy!) voor uitvoering func.e. Func.e aanroep:!int i=3;!!bereken(i);! Func.e def:!int bereken(int j){!!!j = j + j*2;!!!return j;!!};! Java, ML, Scheme, C, Pascal,
86 Strikte evalua.e Call- by- Reference: : parameter expressies worden geëvalueerd en een variabelenaam verwijst naar de waarde (referen.e naar geheugen!) voor uitvoering van de func.e. Func.e aanroep:!int i=3;!!bereken(i);! Func.e def:!int bereken(int& j){!!!j = j + j*2;!!!return j;!!}! Func.e aanroep:!int i=3;!!bereken(&i);! Func.e def:!int bereken(int* j){!!!*j = *j + (*j)*2;!!!return *j;!!}!
87 Niet- strikte evalua.e Call- by- Name: iedere verwijzing naar de expressie wordt vervangen door de expressie zelf. De expressie wordt opnieuw geëvalueerd bij elk gebruik ervan. Func.e aanroep:!a[0]=3; a[1]=14;!!int i =0;!!bereken(a[i],&i);!! Func.e def:!int bereken(int l, int i){!!!l = l+1;!!!i = i+1;!!!l = l-1!!!return l;!!}!
88 Niet- strikte evalua.e Call- by- Name: iedere verwijzing naar de expressie wordt vervangen door de expressie zelf. De expressie wordt opnieuw geëvalueerd bij elk gebruik ervan. Func.e aanroep:!a[0]=3; a[1]=14;!!int i =0;!!bereken(a[i],&i);!! Func.e def:!int bereken(int a[i], int i){!!!a[i] = a[i]+1;!!!i = i+1;!!!a[i] = a[i]-1!!!return a[i];!!}! Zelden of nooit ondersteund in de meeste programmeertalen. Algol60 is de bekendste taal die call- by- name implementeert.
89 Niet- strikte evalua.e Call- by- Need: werkt zoals call- by- name maar na de eerste evalua.e wordt die waarde verder gebruikt. In pure func.onele programmeertalen is het effect hetzelfde als call- by- name en wordt vaak Lazy Evalua.on genoemd. plus14 x y = x+x! plus14 (2*3) (4-2)!! Haskell implementeert call- by- need. Verschillende andere talen ondersteunen deze seman.ek ook, naast call- by- value: D, Scheme, Nemerle, Python,
90 Func.es samenvoegen Verschillende func.es samen voegen met. Uitvoer van func.e wordt invoer van andere func.e f. g betekent dat de func.e f na g wordt uitgevoerd met als input van f de output van g f x = x*3! driekeer f = f. f. f! main = print ((driekeer f) 4)!
91 Func.es samenvoegen Leg uit wat het volgende stukje code doet: import List! lettert = last. transpose. group. sort! main = print (lettert "bladerdeeg )! Maak bijvoorbeeld gebruik van Hoogle: hpp://
92 Oefeningen set 1 (makkelijk) Schrijf de volgende func.es Omdraaien van een lijst (in: [1,2,5], uit: [5,2,1]) Roteren van een lijst (in: [1,2,3,4], uit: [4,1,2,3]) Combineer (herbruik) beide func.es in een nieuwe func.e roteerdraaiom (in: [1,2,3,4], uit: [1,4,3,2]) Schrijf de volgende func.es die een func.e toepassen Gebruik de map func.e om de func.es omdraaien en roteren toe te passen op een lijst van lijsten Schrijf een func.e max:: Int- >Int- >Int die het maximum van twee integers teruggeee en pas die met foldl (of foldr) toe op een constante en een lijst van integers
93 Oefeningen set 2 (makkelijk) Schrijf een func.e optellen :: Int - > Int die de eenheden van een getal bij elkaar optelt. optellen 1500 = 6 optellen = 21 Schrijf een func.e die graden celcius naar graden farenheit omzet. Schrijf tevens de func.e die graden farenheit naar celcius omzet. Schrijf een func.e die gegeven een lijst de duplicaten uit die lijst verwijdert
94 Oefeningen set 3 (medium) Schrijf een func.e die de lijst van fibonacci nummers genereert (gebruik de luie eigenschap van Haskell). Schrijf een andere func.e die de eerste n elementen uitschrije van de lijst. Laat de gebruiker n zelf ingeven. Schrijf een func.e bevat :: [Int]- >[Int]- >Bool die gegeven twee lijsten teruggeee of de sequen.e van elementen van de eerste lijst ook voorkomt in de tweede lijst. Bijv. bevat [1,2] [6,10,1,2,8] = True en bevat [1,8] [8,8,7] = False
95 Oefeningen set 4 (medium- moeilijk) Jolly Jumpers: een lijst getallen van lengte n noemt men jolly jumpers als het verschil tussen opeenvolgende getallen alle waardes tussen 0 en n aanneemt. Zo is de lijst 1,4,2,3 een jolly jumper omdat de verschillen tussen de opeenvolgende getallen 3,2 en 1 zijn. Schrijf een func.e jjumpers :: [Int] - > Bool die True teruggeee als de lijst een jolly jumper is.
96 Oefeningen set 4 (medium- moeilijk) Schrijf een programma dat een nummer N in leest en een lijst teruggeee van alle Smith nummers tussen 0 en N. Hergebruik primefactors hiervoor. Een Smith getal is een getal waarvan de som van de eenheden van de priemfactorisa.e gelijk is aan de som van de eenheden van het getal. Bijvoorbeeld: 378 = en = Zorg ervoor dat er geen priemgetallen in de lijst voorkomen Geef een lijst van alle Smith broers : twee opeenvolgende getallen die beide Smith getallen zijn zoals [,(94094, 94095), (94184, 94185), (94584, 94585), ] Geef enkel Smith nummers die een palindroom zijn, zoals 454
97 Oefeningen Meer oefeningen maken? hpp:// hpp:// Exercises
98 Referen.es Haskell: The Crae of Func.onal Programming (second edi.on), Simon Thompson Haskell Wikibook; hpp://en.wikibooks.org/wiki/haskell A gentle introduc.on to Haskell, Paul Hudak, John Peterson, Joseph Fasel; hpp:// Yet Another Haskell Tutorial: hpp://en.wikibooks.org/wiki/haskell/yaht hpp:// Voor de beslagen programmeur: The Haskell School of Expression: Learning Func.onal Programming through Mul.media, Paul Hudak, hpp:// Leuk om te weten: Wearing the hair shirt: a retrospec.ve on Haskell, Simon Peyton Jones. hpp://research.microsoe.com/~simonpj/papers/haskell- retrospec.ve/
99 Ook interessant (1) hpp:// ~rjmh/papers/whyfp.html hpp://haskell.org/haskellwiki/ Why_Haskell_mapers
100 Ook interessant (2) hpp://book.realworldhaskell.org/
101 Ook interessant (3) A taste of Haskell hpp://research.microsoe.com/en- us/um/ people/simonpj/papers/haskell- tutorial/
102 Ook interessant (4) hpp://labs.google.com/papers/mapreduce.html
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 informatieInleiding 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 informatieCollege 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 informatieWat 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 informatieVakgroep 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 informatieHaskell: 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 informatieVerzamelingen, 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 informatieAls 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 informatieinleiding 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 informatieVerzamelingen, 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 informatieInleiding 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 informatieOEFENINGEN PYTHON REEKS 1
Vraag 1: Expressies & Types OEFENINGEN PYTHON REEKS 1 Python maakt gebruik van enkele vaak voorkomende (data)types. Zo zijn er integers die behoren tot de gehele getallen (VB: 3), zijn er float s die behoren
Nadere informatieVerzamelingen, 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 informatieOEFENINGEN PYTHON REEKS 1
Vraag 1: Expressies & Types OEFENINGEN PYTHON REEKS 1 Python maakt gebruik van enkele vaak voorkomende (data)types. Zo zijn er integers die behoren tot de gehele getallen (VB: 3), zijn er float s die behoren
Nadere informatieOEFENINGEN PYTHON REEKS 1
OEFENINGEN PYTHON REEKS 1 Vraag 1: Python als een eenvoudige rekenmachine Python maakt gebruik van enkele vaak voorkomende (data)types. Zo zijn er integers die behoren tot de gehele getallen (VB: 3) en
Nadere informatieCollege 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 informatieInleiding 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 informatieGeavanceerde Programmeertechnologie. Prof. dr. Kris Luyten Jo Vermeulen
Geavanceerde Programmeertechnologie Prof. dr. Kris Luyten Jo Vermeulen Wat mag je verwachten? Je wordt efficiënter als software ontwikkelaar Je kan je weg vinden in nieuwe programmeertalen van verschillende
Nadere informatieConstanten. 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 informatiePYTHON 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 informatieProgrammeren 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 informatieHOOFDSTUK 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 informatieSyntax- (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 informatieProgrammeren met Arduino-software
Programmeren met Arduino-software De software waarin we programmeren is Arduino IDE. Deze software is te downloaden via www.arduino.cc. De programmeertaal die hier gebruikt wordt, is gebaseerd op C en
Nadere informatiePython. 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 informatieArrays. 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 informatie1 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 informatieThinking 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 informatieModelleren 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 informatieVAN HET PROGRAMMEREN. Inleiding
OVERZICHT VAN HET PROGRAMMEREN Inleiding Als je leert programmeren lijkt het nogal overweldigend om die eerste stappen te doorworstelen. Er zijn dan ook heel wat programmeertalen (Java, Ruby, Python, Perl,
Nadere informatieDatatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double.
Algemeen C# Variabele Een variabele is een willekeurige waarde die word opgeslagen. Een variabele heeft altijd een datetype ( De soort waarde die een variabele bevat). Datatypes Een datatype is de sort
Nadere informatieEen 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 informatieModelleren 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 informatieLab 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 informatieControle 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 informatieVariabelen 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 informatieProgrammeren en Wetenschappelijk Rekenen in Python. Wi1205AE I.A.M. Goddijn, Faculteit EWI 22 april 2014
Programmeren en Wetenschappelijk Rekenen in Python Wi1205AE, 22 april 2014 Inleiding Cursus coördinator e-mail Docent e-mail : Jacco Hoekstra : J.M.Hoekstra@TUDelft.nl : Ingeborg Goddijn : I.A.M.Goddijn@TUDelft.nl
Nadere informatieModelleren en Programmeren
Modelleren en Programmeren Jeroen Bransen 13 december 2013 Terugblik Fibonacci public class Fibonacci { public static void main(string[] args) { // Print het vijfde Fibonaccigetal System.out.println(fib(5));
Nadere informatieZelftest 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 informatieCollege I/O
College 2016-2017 I/O Doaitse Swierstra Verteld door Jurriaan Hage Utrecht University Input en Output Tot dusverre: een module bevat een aantal functiedefinities GHCi drukt de waarde af van een ingetikte
Nadere informatie[8] De ene 1 is de andere niet
[8] De ene 1 is de andere niet Volg mee via 08_Types.py In de volgende leerfiche gaan we rekenen met Python. Dat kan je in een programma doen, maar dat kan je ook gewoon vanuit het Shell-venster doen.
Nadere informatieOnline c++ leren programmeren:
Online c++ leren programmeren: Inhoud 1)Waar vind ik een c++ compiler?... 2 2)Hoe start ik een programma in c++?... 2 3)Een eerste c++ programma:... 3 Een eerste programma schrijven:... 3 Mijn eerste programma
Nadere informatieVAN HET PROGRAMMEREN. Inleiding. Het spiraalmodel. De programmeertaal. vervolgens de berekening van het totale bedrag, incl. BTW:
OVERZICHT VAN HET PROGRAMMEREN Inleiding Als je leert programmeren lijkt het nogal overweldigend om die eerste stappen te doorworstelen. Er zijn dan ook heel wat programmeertalen (Java, Ruby, Python, Perl,
Nadere informatieEen spoedcursus python
Een spoedcursus python Zoals je in de titel misschien al gezien hebt, geven wij een spoedcursus Python. Door deze cursus leer je alle basics, zoals het rekenen met Python en het gebruik van strings. Het
Nadere informatieVisual Basic.NET. Visual Basic.NET. M. den Besten 0.3 VB. NET
Visual Basic.NET M. den Besten 0.3 VB. NET Inhoud Voorwoord Deel 1 Visual Basic.NET 1.1 Inleiding...13 1.2 De programmeertaal Visual Basic.NET...14 1.3 Microsoft Visual Basic 2010 Express Edition...15
Nadere informatieProgrammeermethoden 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 informatieHoofdstuk 0. Van Python tot Java.
Hoofdstuk 0. Van Python tot Java. In dit eerste hoofdstuk maken we de overstap van Python naar Java. We bespreken de verschillen en geven wat achtergrondinformatie. In het volgende hoofdstuk gaan we dieper
Nadere informatieProgrammeermethoden 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 informatie6,1. Samenvatting door een scholier 1809 woorden 28 oktober keer beoordeeld. Informatica
Samenvatting door een scholier 1809 woorden 28 oktober 2005 6,1 16 keer beoordeeld Vak Methode Informatica Turing informatica samenvatting. hst3: algoritme:een beschrijving van stappen die gedaan moeten
Nadere informatieDatastructuren Werkcollege Intro
Bart Hijmans, Universiteit Leiden. Universiteit Leiden The Netherlands Focus 1 19 ˆ Ervaring in gebruik en implementatie van datastructuren ˆ Kennis van mogelijkheden ˆ Programmeren voor andere programmeurs
Nadere informatieFunctioneel programmeren met Helium
NIOC 2004 Functioneel programmeren met Helium Bastiaan Heeren en Daan Leijen {bastiaan,daan}@cs.uu.nl Universiteit Utrecht NIOC 2004, Groningen, 3 november. Overzicht Overzicht 1 Functioneel programmeren
Nadere informatieBEGINNER JAVA Inhoudsopgave
Inhoudsopgave 6 Configuratie Hallo wereld! Praten met de gebruiker Munt opgooien Voorwaarden Lussen......6 Configuratie Met deze Sushi kaarten ga je een simpel spel maken met één van de meest populaire
Nadere informatieJavascript oefenblad 1
Leer de basis van Javascript. Javascript oefenblad 1 Niels van Velzen Javascript oefenblad 1 Pagina 2 Inleiding Javascript is niet altijd even makkelijk. Vooral aan het begin is het even wennen hoe de
Nadere informatieUniversiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren
Universiteit van Amsterdam FNWI Voorbeeld van tussentoets Inleiding programmeren Opgave 1: Wat is de uitvoer van dit programma? public class Opgave { static int i = 0 ; static int j = 1 ; int i = 1 ; int
Nadere informatieHet relaas van de beginnende programmeur. Het hoe en waarom van de assistent
Het relaas van de beginnende programmeur Het hoe en waarom van de assistent 1. Help, mijn code doet niks... Mogelijke oplossingen: Heb je op run geduwd (groene pijltje)? Zolang je niet op 'run' duwt, kent
Nadere informatieII. 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 informatieInleiding Programmeren 2
Inleiding Programmeren 2 Gertjan van Noord December 17, 2018 Vandaag Naar aanleiding van de opdrachten Zelle hoofdstuk 11 Boolean variabelen: niet checken met == Fout: if clicked == True : gohome () Goed:
Nadere informatieAPPLICATIEBOUW 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 informatieObjectgericht programmeren 1.
Objectgericht programmeren 1 joost.vennekens@kuleuven.be http://www.cs.kuleuven.be/~joost/dn Objectgericht ontwerpen 35% Objectgericht ontwerpen 65% OP1 Informatiesystemen 50% Databanken 50% OP1 Evaluatie
Nadere informatiehttp://www.liacs.nl/home/kosters/java/
sheets Programmeren 1 Java college 2, Walter Kosters De sheets zijn gebaseerd op de hoofdstukken 2 tot en met 6 van: D. Bell en M. Parr, Java voor studenten, Prentice Hall, 2002 http://www.liacs.nl/home/kosters/java/
Nadere informatieDeel 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 informatieInformatica: C# WPO 11
Informatica: C# WPO 11 1. Inhoud Pass by reference (ref, out), recursie, code opdelen in verschillende codebestanden 2. Oefeningen Demo 1: Swapfunctie Demo 2: TryParse(int) Demo 3: Recursion Tree Demo
Nadere informatieGEDETAILLEERDE INHOUD
GEDETAILLEERDE INHOUD dankwoord 17 Inleiding 19 Waarom leer je programmeren?... 19 Waarom Python?... 20 Waarom Minecraft?... 20 Wat staat er in dit boek?.... 20 Online bronnen... 22 Ga nu maar op avontuur...
Nadere informatieLeren 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 informatieHOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Informatie. Voorbeeld. Voorbeeld: toegangsprijs
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 informatieOntwerp van Algoritmen: opgaven weken 3 en 4
0 Ontwerp van Algoritmen: opgaven weken 3 en 4 Voor alle volgende opgaven over programmaatjes geldt de spelregel: formuleer altijd eerst alle bewijsverplichtingen. selectie 45. (tail distribution)(prima
Nadere informatieProgrammeermethoden 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 informatieFunctioneel 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 informatieProgrammeren PYTHON OEFENTENTAMEN 2. Schrijf jouw antwoorden op dit tentamen. Tijd: 2 uur. Maximaal aantal punten: 32. Naam: Studentnummer:
Programmeren PYTHON OEFENTENTAMEN 2 Naam: Studentnummer: Schrijf jouw antwoorden op dit tentamen Tijd: 2 uur Maximaal aantal punten: 32 Menselijke interpreter (6 punten) 0. (1 punt) Wat is de uitkomst
Nadere informatieProgrammeermethoden 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 informatieJe 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 informatieUNIVERSITEIT 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 informatieEen topprogrammeur in het OO programmeren is Graig Larman. Hij bedacht de volgende zin:
Java Les 2 Theorie Beslissingen Algemeen Net als in het dagelijks leven worden in software programma s beslissingen genomen, naast het toekennen van waarden aan variabelen zijn beslissingen één van de
Nadere informatieEen gelinkte lijst in C#
Een gelinkte lijst in C# In deze tutorial ga demonstreren hoe je een gelinkte lijst kan opstellen in C#. We gaan een klasse schrijven, die een gelijkaardige functionaliteit heeft als een ArrayList, namelijk
Nadere informatieEen 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 informatieVoorbeeldtentamen 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 informatieMINICURSUS PHP. Op dit lesmateriaal is een Creative Commons licentie van toepassing Sebastiaan Franken en Rosalie de Klerk Bambara
MINICURSUS PHP Op dit lesmateriaal is een Creative Commons licentie van toepassing. 2017-2018 Sebastiaan Franken en Rosalie de Klerk Bambara PHP Cursus Deze cursus is om de eerste stappen in de wereld
Nadere informatieJava Les 3 Theorie Herhaal structuren
Java Les 3 Theorie Herhaal structuren Algemeen Een herhaal structuur een is programmeertechniek waarbij bepaalde Java instructies worden herhaald net zo lang tot een bepaalde voorwaarde is bereikt. Een
Nadere informatieModelleren 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 informatieOpmerkingen en vragen aan Ultieme vraag: Hoe beïnvloedt dit de winstkansen?
2IP05: Programmeren Blok A http://www.win.tue.nl/ wstomv/edu/2ip05/ 5 spelers, 2 dobbelstenen Probleem met dobbelspel College 1 Per ronde werpt elke speler 1 Kees Hemerik Tom Verhoeff Technische Universiteit
Nadere informatieextra oefening algoritmiek - antwoorden
extra oefening algoritmiek - antwoorden opgave "Formule 1" Maak een programma dat de gebruiker drie getal A, B en C in laat voeren. De gebruiker zorgt ervoor dat er positieve gehele getallen worden ingevoerd.
Nadere informatieHoofdstuk 7: Werken met arrays
Programmeren in Microsoft Visual Basic 6.0, lessenserie voor het voortgezet onderwijs HAVO/VWO David Lans, Emmauscollege, Marnix Gymnasium Rotterdam, januari 2004 Hoofdstuk 7: Werken met arrays 7.0 Leerdoel
Nadere informatieLet op dat de scoping regels gerespecteerd blijven; het volgende voorbeeld mag geen fout melden.
Vrije Universiteit Brussel Faculteit Wetenschappen Vakgroep Computerwetenschappen Academiejaar 2009 2010: tweede examenzittijd Interpretatie van Computerprogrammaʼs I schriftelijke test Voorafgaandelijk:
Nadere informatiecontinue 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 informatieOpgaven. Python Assessment
Opgaven Python Assessment Nijmegen - Utrecht www.atcomputing.nl Copyright 2015,2016 Versie: 1a Inleiding Met dit assessment kun je controleren of je voldoende parate kennis over Python hebt om te beginnen
Nadere informatieOntwerp van Informatiesystemen
1ste bach HIB Ontwerp van Informatiesystemen Prof. Verelst Q www.quickprinter.be uickprinter Koningstraat 13 2000 Antwerpen 112 2,50 Online samenvattingen kopen via www.quickprintershop.be Table of Contents
Nadere informatieInhoud leereenheid 4. Inleiding JavaScript. Introductie 99. Leerkern 100. Zelftoets 108. Terugkoppeling 109
Inhoud leereenheid 4 Inleiding JavaScript Introductie 99 Leerkern 100 1 Leren programmeren in JavaScript 100 2 Chapter 1: Introduction 101 3 Chapter 2, paragrafen 1 t/m 5 102 4 Chapter 2, paragrafen 6
Nadere informatieAdd the standing fingers to get the tens and multiply the closed fingers to get the units.
Digit work Here's a useful system of finger reckoning from the Middle Ages. To multiply $6 \times 9$, hold up one finger to represent the difference between the five fingers on that hand and the first
Nadere informatieFunctioneel Programmeren
Functioneel Programmeren ii c Copyright 1992 2002 Informatica-instituut, Universiteit Utrecht Deze tekst mag voor educatieve doeleinden gereproduceerd worden op de volgende voorwaarden: de tekst wordt
Nadere informatieGo: een snelle introductie
Go: een snelle introductie Auteur: Daniël Heres Datum: Januari 2010 3,2,1 Go! "Weer een nieuwe taal". De keuze in programmeertalen is groot en de gelijkenis vaak ook. Toch is er een ding dat vaak overeind
Nadere informatieZelftest 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 informatieProbleem met dobbelspel. 2IP05: Programmeren Blok A. 5 spelers,2 dobbelstenen. wstomv/edu/2ip05/ Per ronde werpt elke speler 1
2IP05: Programmeren Blok A http://www.win.tue.nl/ wstomv/edu/2ip05/ College 1 5 spelers,2 dobbelstenen Probleem met dobbelspel Per ronde werpt elke speler 1 Tom Verhoeff Technische Universiteit Eindhoven
Nadere informatieSQL datadefinitietaal
SQL datadefinitietaal We kunnen er het schema van de database mee bepalen: metadata toevoegen, wijzigen en verwijderen uit een database. Basiscommando's: CREATE : toevoegen van metagegevens DROP : verwijderen
Nadere informatieequationeel programmeren 2015 01 05 college 1
equationeel programmeren 2015 01 05 college 1 schema praktische zaken opmerkingen vooraf lambda termen materiaal schema praktische zaken opmerkingen vooraf lambda termen materiaal wie hoorcolleges: Femke
Nadere informatiecolleges recursieve datastructuren college 9 prioriteit van operatoren prioriteit in recursive descent parser
colleges recursieve datastructuren college 9 interpreteren: waarde van bomen bepalen transformeren: vorm van bomen veranderen parseren herkennen van expressie in de tekst herkennen van functies onderwerp
Nadere informatieZelftest 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 informatieFOR DUTCH STUDENTS! ENGLISH VERSION NEXT PAGE
FOR DUTCH STUDENTS! ENGLISH VERSION NEXT PAGE Tentamen Bewijzen en Technieken 1 7 januari 211, duur 3 uur. Voeg aan het antwoord van een opgave altijd het bewijs, de berekening of de argumentatie toe.
Nadere informatieAlgoritmen 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 informatieProgrammeermethoden. 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 informatieSPSS VOOR DUMMIES+ Werken met de NSE: enkele handige basisbeginselen. Gebaseerd op SPSS21.0 & Benchmarkbestand NSE 2014
SPSS VOOR DUMMIES+ Werken met de NSE: enkele handige basisbeginselen Gebaseerd op SPSS21.0 & Benchmarkbestand NSE 2014 Huidig kennis- en ervaringsniveau?????? Beginners Gevorderden 2 Inhoud 1. Wat doe
Nadere informatie