Inleiding tot Func.oneel Programmeren

Maat: px
Weergave met pagina beginnen:

Download "Inleiding tot Func.oneel Programmeren"

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 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

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

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

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

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

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

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

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

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

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

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

OEFENINGEN PYTHON REEKS 1

OEFENINGEN 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 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

OEFENINGEN PYTHON REEKS 1

OEFENINGEN 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 informatie

OEFENINGEN PYTHON REEKS 1

OEFENINGEN 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 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

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

Geavanceerde Programmeertechnologie. Prof. dr. Kris Luyten Jo Vermeulen

Geavanceerde 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 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

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

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

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

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

Programmeren met Arduino-software

Programmeren 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 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

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

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

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

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

VAN HET PROGRAMMEREN. Inleiding

VAN 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 informatie

Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double.

Datatypes 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 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

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

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

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

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

Programmeren en Wetenschappelijk Rekenen in Python. Wi1205AE I.A.M. Goddijn, Faculteit EWI 22 april 2014

Programmeren 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 informatie

Modelleren en Programmeren

Modelleren 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 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

College I/O

College 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 [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 informatie

Online c++ leren programmeren:

Online 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 informatie

VAN HET PROGRAMMEREN. Inleiding. Het spiraalmodel. De programmeertaal. vervolgens de berekening van het totale bedrag, incl. BTW:

VAN 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 informatie

Een spoedcursus python

Een 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 informatie

Visual Basic.NET. Visual Basic.NET. M. den Besten 0.3 VB. NET

Visual 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 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

Hoofdstuk 0. Van Python tot Java.

Hoofdstuk 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 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

6,1. Samenvatting door een scholier 1809 woorden 28 oktober keer beoordeeld. Informatica

6,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 informatie

Datastructuren Werkcollege Intro

Datastructuren 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 informatie

Functioneel programmeren met Helium

Functioneel 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 informatie

BEGINNER JAVA Inhoudsopgave

BEGINNER 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 informatie

Javascript oefenblad 1

Javascript 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 informatie

Universiteit van Amsterdam FNWI. Voorbeeld van tussentoets Inleiding programmeren

Universiteit 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 informatie

Het 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 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 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

Inleiding Programmeren 2

Inleiding 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 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

Objectgericht programmeren 1.

Objectgericht 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 informatie

http://www.liacs.nl/home/kosters/java/

http://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 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

Informatica: C# WPO 11

Informatica: 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 informatie

GEDETAILLEERDE INHOUD

GEDETAILLEERDE 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 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

HOOFDSTUK 3. Imperatief programmeren. 3.1 Stapsgewijs programmeren. 3.2 If Then Else. Informatie. Voorbeeld. Voorbeeld: toegangsprijs

HOOFDSTUK 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 informatie

Ontwerp van Algoritmen: opgaven weken 3 en 4

Ontwerp 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 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

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

Programmeren PYTHON OEFENTENTAMEN 2. Schrijf jouw antwoorden op dit tentamen. Tijd: 2 uur. Maximaal aantal punten: 32. Naam: Studentnummer:

Programmeren 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 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

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

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 topprogrammeur in het OO programmeren is Graig Larman. Hij bedacht de volgende zin:

Een 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 informatie

Een gelinkte lijst in C#

Een 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 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

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

MINICURSUS 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 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 informatie

Java Les 3 Theorie Herhaal structuren

Java 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 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

Opmerkingen en vragen aan Ultieme vraag: Hoe beïnvloedt dit de winstkansen?

Opmerkingen 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 informatie

extra oefening algoritmiek - antwoorden

extra 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 informatie

Hoofdstuk 7: Werken met arrays

Hoofdstuk 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 informatie

Let op dat de scoping regels gerespecteerd blijven; het volgende voorbeeld mag geen fout melden.

Let 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 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

Opgaven. Python Assessment

Opgaven. 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 informatie

Ontwerp van Informatiesystemen

Ontwerp 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 informatie

Inhoud leereenheid 4. Inleiding JavaScript. Introductie 99. Leerkern 100. Zelftoets 108. Terugkoppeling 109

Inhoud 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 informatie

Add the standing fingers to get the tens and multiply the closed fingers to get the units.

Add 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 informatie

Functioneel Programmeren

Functioneel 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 informatie

Go: een snelle introductie

Go: 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 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

Probleem met dobbelspel. 2IP05: Programmeren Blok A. 5 spelers,2 dobbelstenen. wstomv/edu/2ip05/ Per ronde werpt elke speler 1

Probleem 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 informatie

SQL datadefinitietaal

SQL 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 informatie

equationeel programmeren 2015 01 05 college 1

equationeel 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 informatie

colleges recursieve datastructuren college 9 prioriteit van operatoren prioriteit in recursive descent parser

colleges 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 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

FOR DUTCH STUDENTS! ENGLISH VERSION NEXT PAGE

FOR 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 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

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

SPSS 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 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