1 / 35

Kolommen uniformeren

Kolommen uniformeren. aap. noot. mies. wim. zus. jet. weide. hok. schapen. unikol =. Kolommen uniformeren. aap. noot. mies. wim. zus. jet. weide. hok. schapen. unikol = wissel . map uniform . wissel. [4, 6, 8]. [3, 5, 7]. [2, 4, 6, 8]. [1, 3, 5, 7]. Wissel.

masako
Download Presentation

Kolommen uniformeren

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. Kolommen uniformeren aap noot mies wim zus jet weide hok schapen unikol =

  2. Kolommen uniformeren aap noot mies wim zus jet weide hok schapen unikol = wissel . map uniform . wissel

  3. [4, 6, 8] [3, 5, 7] [2, 4, 6, 8] [1, 3, 5, 7] Wissel wissel ( xs : xss ) [1, 2] [3, 4] [5, 6] [7, 8] = (wissel xss) zipWith (:) xs [1, 2]

  4. [ ] [2] [2,3] [2,3,4] [ ] [1] [1,2] [1,2,3] [1,2,3,4] Aanloop :: [a]  [[a]] aanloop ( x : xs ) 1 2 3 4 = (aanloop xs) [ ] : map ((:) ) x 1

  5. [ ] [4] [3] [2] [2,3,4] [3,4] [2,3] segment :: [a]  [[a]] segment ( x : xs ) 1 2 3 4 = (segment xs) ++ aanloop (x:xs) tail( ) 1 [ ] [4] [3] [2] [2,3,4] [3,4] [2,3] [1] [1,2,3] [1,2,3,4] [1,2]

  6. [ ] [4] [2] [2,4] [2,3,4] [3] [3,4] [2,3] deelrij :: [a]  [[a]] deelrij ( x : xs ) 1 2 3 4 = (deelrij xs) ++ map ((:) ) x (deelrij xs) 1 [ ] [4] [2] [2,4] [2,3,4] [3] [3,4] [2,3] [1] [1,3] [1,3,4] [1,2,3] [1,2,4] [1,2,3,4] [1,4] [1,2]

  7. 1 2 3 4 [1,2] [1,4] [2,4] [3,4] [1,3] [2,3] kies :: Int  [a]  [[a]] > kies 2 kies 0 xs = kies n [ ] = kies n (x:xs) = [ [ ] ] [ ] map ((:)x) (kies (n-1) xs) ++ kies n xs

  8. Hogere-ordefuncties zien kwadraten [ ] = [ ] kwadraten (x:xs) = x*x : kwadraten xs kwadraten = map (\ x  x*x) totaal [ ] = 0 totaal (x:xs) = x + totaal xs totaal = foldr (+) 0

  9. Hogere-ordefuncties zien concat [ ] = [ ] concat (xs:xss) = xs ++ concat xss concat = foldr (++) [ ] length [ ] = 0 length (x:xs) = 1 + length xs length = foldr (\ e r  1+r) 0

  10. Hogere-ordefuncties zien sorteer [ ] = [ ] sorteer (x:xs) = insert x (sorteer xs) sorteer = foldr insert [ ] wissel [ ] = repeat [ ] wissel (xs:xss) = zipWith (:) xs (wissel xss) wissel = foldr (zipWith (:)) (repeat [ ])

  11. 3 4 Toepassing: Breuken typeBreuk = (Int, Int) maal :: Breuk  Breuk  Breuk plus :: Breuk  Breuk  Breuk eq :: Breuk  Breuk  Bool eenvoud :: Breuk  Breuk plus (x,y) (p,q) = (x*q+y*p, y*q)

  12. Toepassing: Polynomen 3.5x4 + 6.1x2 + 2.5 typeTerm = (Float, Int) type Poly = [Term] maal :: Poly  Poly  Poly plus :: Poly  Poly  Poly eq :: Poly  Poly  Bool eenvoud :: Poly  Poly plus p q = eenvoud (p ++ q)

  13. Polynomen vermenigvuldigen 3x + 1 * 2x2 + 5 = 6x3+15x + 2x2+5 • Alle termen met elkaar vermenigvuldigen maal :: Poly  Poly  Poly maal p q = eenvoud (cross tMaal p q) tMaal :: Term  Term  Term tMaal (c1,e1) (c2,e2) = (c1*.c2, e1+e2)

  14. Kruisproduct • Met lijstcomprehensie • Met expliciete recursie cross :: (aab)  [a]  [a]  [b] cross f xs ys = [ f x y | x xs, yys ] cross f [ ] ys = cross f (x:xs) ys = [ ] map (f x) ys ++ cross f xs ys

  15. Toepassing: expressies (3*a + 4*b) / c typeExpr = plus :: Expr  Expr  Expr maal :: Expr  Expr  Expr waarde :: [(String,Int)]  Expr  Int eenvoud :: Expr  Expr

  16. Expressies: poging 1 (3*a + 4*b) / c typeExpr = String 3+a 4+b * maal :: Expr  Expr  Expr waarde :: [(String,Int)]  Expr  Int maal a b = a ++ “*” ++ b waarde tab s = foldr ??? ??? s

  17. Expressies: poging 2 dataExpr = | | | | | Con Var Plus Min Maal Deel Int String Expr Expr Expr Expr Expr Expr Expr Expr constructorfuncties waarmee je een Expr bouwt types van de parametersdie daarbij nodig zijn

  18. Een datastructuur opschrijven • Lijst • Boom [ ] 1 : 2 : 3 : 4 : Tak 3 ( ) ( ) Tak 7 ( ) ( ) Tak 4 Blad Blad Tak 2 Blad Blad Tak 5 (Tak 1 Blad Blad ) (Blad )

  19. Een datastructuur opschrijven (3*a + 4*b) / c • Expr (Maal (Con 3) (Var “a”)) (Maal (Con 4) (Var “b”)) Deel ( ) ( Var “c” ) Plus

  20. Expressies: poging 3 dataExpr = | | | | | Constructorenbeginnen methoofdletter of dubbelepunt Int String Expr Expr Expr Expr Expr Expr Expr Expr Con Var :+: :-: :*: :/: constructorfuncties/operatoren waarmee je een Expr bouwt constructorfuncties waarmee je een Expr bouwt

  21. Een datastructuur opschrijven (3*a + 4*b) / c • Expr Con 3 :*: Var “a” Con 4 :*: Var “b” ( ) :/: ( Var “c” ) :+: infixl 6 (:+:), (:-:) infixl 7 (:*:), (:/:)

  22. Functies op Expressies plus :: Expr  Expr  Expr maal :: Expr  Expr  Expr waarde :: [(String,Int)]  Expr  Int eenvoud :: Expr  Expr plus = (:+:) maal = (:*:)

  23. Functies op Expressies wrd :: [(String,Int)]  Expr  Int wrd t (Con n) wrd t (Var v) wrd t (a:+:b) wrd t (a:-:b) wrd t (a:*:b) wrd t (a:/:b) = = = = = = n zoekop t v wrd t a + wrd t b wrd t a – wrd t b wrd t a * wrd t b wrd t a / wrd t b

  24. Functies op Expressies afg :: Expr  String  Expr “de afgeleide naar eenvariabele” afg (Con c) dx afg (Var v) dx = Con 0 | eqString v dx = Con 1 | otherwise = Con 0 afg (a:+:b) dx afg (a :-:b) dx = afg a dx :+: afg b dx = afg a dx :-: afg b dx

  25. Functies op Expressies afg :: Expr  String  Expr = a :*: afg b dx :+: b :*: afg a dx afg (a:*:b) dx afg (a :/:b) dx = ( b :*: afg a dx :-: a :*: afg b dx ) :/: (b :*: b)

  26. Twee soorten berekening • Numeriek • Symbolisch diff :: (FloatFloat)  (FloatFloat) diff f x = (f (x+h) – f x) / h where h = 0.00001 dat is nou AI! afg :: Expr  String  Expr afg (Con c) dx = Con 0 afg (Var v) dx | eqString v dx = Con 1 |otherwise = Con 0 afg (a:+:b) dx = afg a dx :+: afg b dx afg (a:*:b) dx = a :*: afg b dx :+: b :*: afg a dx

  27. Rekenen met Booleans (&&) :: Bool  Bool  Bool (||) :: Bool  Bool  Bool not :: Bool  Bool True && y = y False && y = False True || y = True False || y = y not True = False not False = True

  28. Symbolisch Propositiesbewerken dataProp = | | | | | Bool String Prop Prop Prop Prop Prop Prop Prop Con Var Not :/\ :\/ :-> constructorfuncties/operatoren waarmee je een Prop bouwt constructorfuncties waarmee je een Expr bouwt

  29. Functies op Proposities typeBedeling = [(String,Bool)] evalueer :: Bedeling  Prop  Bool > evalueer [ (“p”,True), (“q”, False) ] (Var “p” :/\ Var “q”) False

  30. Functies op Proposities tautologie :: Prop  Bool contradictie :: Prop  Bool > tautologie (Var “p” :\/ Not (Var “p”)) True > contradictie (Var “p” :-> Var “q” ) False

  31. Functies op Proposities equivalentie :: Prop  Prop  Bool vervulbaar :: Prop  [Bedeling] > vervulbaar (Var “p” :-> Var “q” ) [ [ (“p”,True) , (“q”,True) ] , [ (“p”,False) , (“q”, False) ] , [ (“p”,False) , (“q”, True) ] ]

  32. Functies op Proposities eenvoudig :: Prop  Prop tautologieën en contradictiesvervangen door constanten > eenvoudig Not(Not (Var “p” :/\ (Var “q” :\/ Not Var “q”)) Not (Not (Var “p” :/\ Con True)) Not (Not (Var “p”)) Var “p” operatoren met constanteparameters wegwerken dubbele Not wegwerken

  33. Functies op Proposities normaalvorm :: Prop  Prop > normaalvorm (Not (Not Var “p” :\/ Var “q” ) Var “p” :/\ Not Var “q” Not alleen voor variabelen

  34. Functies op Proposities toon :: Prop  String ontleed :: String  Prop > putStr (toon (Var “p” :-> Var “q”)) p -> q > ontleed “p && !p” Var “p” :/\ Not Var “p”

  35. Functies op Proposities evalueer :: Bedeling  Prop  Bool tautologie :: Prop  Bool contradictie :: Prop  Bool equivalentie :: Prop  Prop  Bool vervulbaar :: Prop  [Bedeling] eenvoudig :: Prop  Prop normaalvorm :: Prop  Prop toon :: Prop  String ontleed :: String  Prop

More Related