1 / 28

Imperatief programmeren

Imperatief programmeren. Programma bestaat uit Runnen is. opdrachten gegroepeerd in methoden. één voor één uitvoeren te beginnen met main. Functioneel programmeren. Programma bestaat uit Runnen is. functie-definities. uitrekenen van een expressie. Logisch programmeren.

ilori
Download Presentation

Imperatief programmeren

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Imperatief programmeren • Programma bestaat uit • Runnen is opdrachten gegroepeerd in methoden één voor één uitvoeren te beginnen met main

  2. Functioneel programmeren • Programma bestaat uit • Runnen is functie-definities uitrekenen van eenexpressie

  3. Logisch programmeren • Programma bestaat uit • Runnen is predicaat-definities proberen te vervullenvan een predicaat

  4. kwad x = x * x Haskell Functie-definitie static int kwad (int x) { return x*x ;} kwad :: Int  Int

  5. main = kwad 5 Haskell Gebruik van de functie public static void main(String [ ] ps) { System.out.println( this.kwad(5) ); } main :: Int

  6. Functies definiëren • Door combinatie van standaardfuncties fac :: Int  Int fac n = product [1..n] oneven :: Int  Bool oneven n = not (even n) negatief :: Int  Bool negatief n = n < 0

  7. Prelude: operatoren op lijsten • “op kop van” • “samenvoegen” : > 1 : [2, 3, 4] [1, 2, 3, 4] ++ > [1, 2] ++ [3, 4, 5] [1, 2, 3, 4, 5]

  8. Prelude: functies op lijsten null • “leeg?” • “allemaal waar?” • “neem deel” > null [ ] True and > and [ 1<2, 2<3, 1==0] False take > take 3 [2..10] [2, 3, 4]

  9. Functies als parameter • Pas functie toe op alleelementen van een lijst map > map fac [1, 2, 3, 4, 5] [1, 2, 6, 24, 120] > map sqrt [1.0, 2.0, 3.0, 4.0] [1.0, 1.41421, 1.73205, 2.0] > map even [1 .. 6] [False, True, False, True, False, True]

  10. Gevallen onderscheiden abs :: Int  Int abs x | x>=0 | x<0 = x = -x “guards”

  11. Herhalen fac :: Int  Int fac n | n==0 | n>0 = 1 = fac (n-1) n * graag zonder product te gebruiken “recursie”

  12. Lijst-patronen null :: [Int]  Bool null [ ] = Truenull (x:xs) = False head :: [Int]  Int head (x:xs) = x tail :: [Int]  [Int] head (x:xs) = xs

  13. Zelftest sum • Definieer de recursieve functie • met patronen • met gevalsonderscheid d.m.v. guards sum :: [Int]  Int sum [ ] = 0 sum (x:xs) = x + sum xs sum :: [Int]  Int sum xs | null xs = 0 | True = head xs + sum (tail xs)

  14. Quiz (basisschool) 5 + 3 * 2 prioriteitsregel 16 11 3 * 2 5 + 3 + 2 associatief 10 10 5 - 3 - 2 links-associatief 5 - 3 0 4 5 ^ 3 ^ 2 rechts-associatief 3 ^ 2 1252 59 machtsverheffen

  15. Quiz (logica) F  T  F associatief F F F  T  F associatief T T F  T  F rechts-associatief T  F F T implicatie

  16. Quiz (Haskell) los element op kop van lijst x : y : z rechts-associatief y : zs x ++ y ++ z associatief lijsten samenvoegen

  17. Quiz (Helium) toepassen van een functie map fac [1,2,3] f y z map fac links-associatief boven n k links-associatief boven n

  18. Partieel parametriseren plus :: Int  Int  Int plus x y = x + y • Stel: • En dan: drieMeer :: Int  Int drieMeer = plus 3 > map drieMeer [1, 2, 3, 4, 5] [4, 5, 6, 7, 8]

  19. Partieel parametriseren drieMeer = plus 3 drieMeer :: Int  Int • Omgekeerd: • En dus: plus :: Int  (Int  Int) plus :: Int  Int  Int rechts-associatief

  20. zonder haakjes! “Curry-ing” f :: Int  Bool  String • Type • Aanroep Bool  String > f 7 True “hoi” f 7  rechts-associatief links-associatief

  21. Currying Schönfinkeling? • Haskell B. Curry(1900-1982) • Grundlagen der kombinatorischen Logik (1930) • M. Schönfinkel Über die Bausteine der mathematischen Logik (1924)

  22. Currying en map > map fac [1, 2, 3, 4, 5] [1, 2, 6, 24, 120] > map (plus 3) [1, 2, 3, 4, 5] [4, 5, 6, 7, 8] > map (* 2) [1, 2, 3, 4, 5] [2, 4, 6, 8, 10]

  23. Hogere-ordefuncties • Functie met een functieals parameter • Functie met een functieals resultaat map filter inverse afgeleide elke functie met >1 parameter!

  24. Hogere-ordefuncties • Een lijst langs lopenen met elk element iets doen • Een lijst langs lopenen sommige elementen selecteren map filter

  25. map en filter doe dit overal > map even [1, 2, 3, 4, 5, 6] [False, True, False, True, False, True] > filter even [1, 2, 3, 4, 5, 6] [2, 4, 6] pak alleen deze

  26. Publieksvraag kleintjes • Schrijf een functiedie getallen van een lijst oplevertdie kleiner zijn dan 10 kleintjes :: [Int]  [Int] kleintjes xs = filter (<10) xs ook partieel geparametriseerd!

  27. Definitie van map • Geef een recursieve definitie: map :: (ab) [a]  [b] [ ] map f [ ] =map f (x:xs) = f x : map f xs

  28. Definitie van filter • Geef een recursieve definitie,en gebruik guards voor gevalsonderscheid filter :: (aBool) [a]  [a] filter p [ ] = filter p (x:xs) = [ ] | p x | True = x : filter p xs filter p xs

More Related