Polymorf zoeken zoek :: (a  a  Bool)  [ (a, b) ]  a  b zoek eq [ ] x = ??? zoek eq ((a,b):ts) x | eq a x = b | otherwise = zoek eq ts x MayBe b No.

Slides:



Advertisements
Verwante presentaties
Differentie vergelijkingen differentie vergelijkingen
Advertisements

H1 Basis Rekenvaardigheden
dia's bij lessenserie Pythagoras ± v Chr.
Hoofdstuk 8: Recursie.
Lijsten in de -calculus Een lijst [E 1, E 2,..., E n ] kan in de -calculus voorgesteld worden als z.((z E 1 ) z.((z E 2 )... z.((z E n ) nil)...) met nil.
Deel I: Functionele Programmeertalen Hoofdstuk 4: Functioneel Programmeren.
Uitwerking tentamen Functioneel Programmeren 29 januari 2009.
Rekenen met machten met hetzelfde grondtal
PROS2 Les 11 Programmeren en Software Engineering 2.
Hogere-ordefuncties nEen lijst langs lopen en met elk element iets doen nEen lijst langs lopen en sommige elementen selecteren map filter.
Kb.1 Ik leer op een goede manier optellen en aftrekken
Datastructuren Analyse van Algoritmen en O

Hogere-orde functies: herhaald patroon? Parametrizeer! product :: [Int]  Int product [ ]= product (x:xs)= 1 product xs x * and :: [Bool]  Bool and [
Functies op Proposities evalueer:: Bedeling  Prop  Bool tautologie:: Prop  Bool contradictie:: Prop  Bool equivalentie:: Prop  Prop  Bool vervulbaar::
Hoger-ordefuncties op lijsten nDoorloop een lijst en... map :: (a  b)  [a]  [b] filter :: (a  Bool)  [a]  [a] foldr :: (a  a  a)  a  [a]  a.
Blok 11 les 7 Breuken. 1. Ik heb …… dingen Ik verdeel in ….. gelijke delen van de delen noem ik … Dit deel telt ….. dingen.
Breuken blok 9 les 7. 1 van de 6 honden = 1 6    
vwo B Samenvatting Hoofdstuk 1
De grafiek van een machtsfunctie
Voorbeeld a5a · 4b = 20ab b-5a · 4a = -20a 2 c-2a · -6a = 12a 2 d5a · -b · 6c = -30abc e-5b · 3a · -2 = 30ab f-2 · -a = 2a opgave 1 a7a + 8a = 15a b6a.
Differentieer regels De afgeleide van een functie f is volgens de limietdefinitie: Meestal bepaal je de afgeleide niet met deze limietdefinitie, maar.
Differentieer regels De afgeleide van een functie f is volgens de limietdefinitie: Meestal bepaal je de afgeleide niet met deze limietdefinitie, maar.
1 het type x² = getal 2 ontbinden in factoren 3 de abc-formule
Parallelle Algoritmen String matching. 1 Beter algoritme patroonanalyse Bottleneck in eenvoudig algoritme: WITNESS(j) (j = kandidaat in eerste i-blok)
-calculus.
Functies definiëren nDoor combinatie van standaardfuncties fac :: Int  Int fac n = product [1..n] oneven :: Int  Bool oneven n = not (even n) negatief.
Char en String nCharéén letter uord ::Char  Int uchr ::Int  Char nString[Char] uwords :: String  [String] uunwords :: [String]  String ”hoi” ”CKI”
Hogere-ordefuncties nVoeg de elementen van een lijst samen nCombineer twee functies foldr :: (a  b  b)  b  [a]  b [a] (.) :: (b  c)  (a  b)  a.
Reguliere talen nReguliere grammatica: versimpelde Contextvrije grammatica nFinite-state Automaton: andere manier om een taal te beschrijven nReguliere.
Imperatief programmeren nProgramma bestaat uit nRunnen is opdrachten gegroepeerd in methoden één voor één uitvoeren te beginnen met main.
Ontleden nNon-deterministisch m.b.v. Parser-combinators nDeterministisch m.b.v. Stack-machine type Parser a b = [a]  [ (b, [a]) ] type Parser a b = [a]
Functioneel Programmeren Daan Leijen. Wat gaan we doen? 3 fundamentele principes van computatie Equationeel redeneren IO-monad GUI's in Haskell (wxHaskell)
Van de eerste graad in één onbekende
Vergelijkingen van de eerste graad met één onbekende
G1 Rekenen met breuken Leerwerkboek p7.
Werken aan Intergenerationele Samenwerking en Expertise.
Breuken-Vereenvoudigen
stambreuken breuken met 2 gelijke delen breuken met 3 gelijke delen
ribwis1 Toegepaste wiskunde Lesweek 2
ribwis1 Toegepaste wiskunde Lesweek 01 – Deel B
ribwis1 Toegepaste wiskunde, ribPWI Lesweek 01
GELIJKNAMIGE BREUKEN les 31.
Bewerkingen met breuken Les 37.
Breuken.
Algoritme Inhoud: Definitie algoritme Recursieve algoritmes Opgaven
Taal nEen Alfabet is… een eindige verzameling symbolen nEen Taal is… een deelverzameling van T* bij een bepaald alfabet T nEen Zin is… een element van.
Het kwadraat van een getal
Samenvatting hst. 3 sec. 1-3 ( ) :: Parser a b  Parser a b  Parser a b ( ) :: Parser a (b  c)  Parser a b  Parser a c ( ) :: (b  c)  Parser a b.
Computervaardigheden Hoofdstuk 4 — Databank (Basis)
Tentamen vraag 1 Als L en M talen zijn, dan nL  M is gelijk aan { s  t | s  L, t  M } nL M is gelijk aan { s t | s  L, t  M } nL n is gelijk aan.
PROGRAMMEREN LOGISCH en FUNCTIONEEL Ik zeg wat ik denk!
Functioneel programmeren Een snelle herhaling…. Functie-definitie static int kwad (int x) { return x*x ; } kwad x = x * x Haskell kwad :: Int  Int.
Definitie LL(1) Een grammatica is LL(1) nAls je op grond van het eerstvolgende input-symbool kunt kiezen uit alternatieven Formeel: nAls de lookahead-sets.
(S)DT Haskell Functioneel programmeren.
(S)DT Haskell Deel 2 list comprehensions, types en type klassen, programma transformatie, I/O.
Definitie Taal van een grammatica nZij grammatica G = ( T, N, R, S ) nde taal van G is { z  T* | S  * z } L(G)
1 PI1 week 9 Complexiteit Sorteren Zoeken. 2 Complexiteit van algoritmen Hoeveel werk kost het uitvoeren van een algoritme (efficiëntie)? –tel het aantal.
Werk uit.. Methode 1)hou de teller samen door haakjes in te voeren 2)vervang de breukstreep door het deelteken 3)hou ook de noemer samen door haakjes.
Wiskunde voor Engineering HU / Boswell Bèta 11 augustus.
Hoofdstuk 9.2 Strings.
Gameprogrammeren: Expressies
Bewerkingen 5de leerjaar.
Hoofdrekenen 1.
M A R T X I W K U N E D S 2 G1 Rekenen met breuken © André Snijers.
Gameprogrammeren: Arrays
Hoofdrekenen 1.
Vermenigvuldigen en delen. Toepassen.
Breuken optellen en aftrekken
Transcript van de presentatie:

Polymorf zoeken zoek :: (a  a  Bool)  [ (a, b) ]  a  b zoek eq [ ] x = ??? zoek eq ((a,b):ts) x | eq a x = b | otherwise = zoek eq ts x MayBe b No Yes b

Zelftest nSchrijf de functie (definitie en type) die overeenkomstige elementen van twee lijsten koppelt > zipWith (+) [1, 2, 3] [4, 5, 6, 7] [5, 7, 9] met een nader te specificeren operator zipWith

Lijst-comprehensies nNotatie uit de verzamelingenleer { x*x | x  N, x<10 } > [ x*x | x  [1..10], even x ] [4, 16, 36, 64, 100] > [ (x,y) | x  [1,4,8], y  ”ab” ] [ (1,’a’), (1,’b’), (4,’a’), (4,’b’), (8,’a’), (8,’b’) ]

Zelf datastructuren ontwerpen data Boom a = Blad | Tak a (Boom a) (Boom a) constructor functies het nieuwe type types van de parameters van de constructorfuncties Blad:: Boom a Tak:: a  Boom a  Boom a  Boom a

Functies op datastructuren nLijst nBoom length :: [a]  Int length [ ] = 0 length (x:xs) = 1 + length xs omvang :: Boom a  Int omvang Blad = 0 omvang Tak x li re = 1 + omvang li + omvang re constructor functies

Insert in een zoekboom insert :: (a  a  Ord)  a  Boom a  Boom a insert cmp e Blad= insert cmp e (Tak x li re)= Tak e Blad Blad cmp e xf ( ) wheref LT = f _ = Tak x (insert cmp e li) re Tak x li (insert cmp e re)

Toepassing: Breuken type Breuk = (Int, Int) 3434 maal:: Breuk  Breuk  Breuk plus:: Breuk  Breuk  Breuk eq:: Breuk  Breuk  Bool eenvoud :: Breuk  Breuk

Breuken vermenigvuldigen nTeller en noemer vermenigvuldigen * = maal:: Breuk  Breuk  Breuk maal (x,y) (p,q) = (x*p, y*q)

Breuken optellen nEerst gelijknamig maken = plus:: Breuk  Breuk  Breuk plus (x,y) (p,q) = (x*q+y*p, y*q) =

Breuken vergelijken nKruiselings vermenigvuldigen == True eq:: Breuk  Breuk  Bool maal (x,y) (p,q) = x*q == y*p

Toepassing: Polynomen type Term= (Float, Int) type Poly= [Term] 3.5x x maal:: Poly  Poly  Poly plus:: Poly  Poly  Poly eq:: Poly  Poly  Bool eenvoud :: Poly  Poly

Polynomen optellen nSamenvoegen en vereenvoudigen + = plus:: Poly  Poly  Poly plus p q = eenvoud (p ++ q) 3x 4 + 4x 2 2x x 4 + 4x 2 + 2x x 4 + 6x 2 + 1

Polynomen vereenvoudigen nSorteren op exponent termen met gelijke exponent samenvoegen = eenvoud:: Poly  Poly eenvoud = 3x 4 + 4x 2 +2x 3 + x x 4 + 5x 2 + 2x sorteren samenvoegen.verw0.

Polynomen vereenvoudigen eenvoud :: Poly  Poly eenvoud = verw0. samen. sorteren sorteren = isort ord whereord :: Term  Term  Ordering ord (c1,e1) (c2,e2) = ordInt e1 e2 samen ((c1,e1):(c2,e2):ts) | e1==e2 = samen ((c1+c2,e1):ts) | True = (c1,e1) : samen ((c2,e2):ts) samenv ts = ts verw0 = filter ( \(c,e)  c/=.0.0 )

Polynomen vermenigvuldigen nAlle termen met elkaar vermenigvuldigen * = maal:: Poly  Poly  Poly maal p q = eenvoud (cross tMaal p q) 3x + 12x x 3 +15x + 2x 2 +5 tMaal :: Term  Term  Term tMaal (c1,e1) (c2,e2) = (c1*.c2, e1+e2)

Kruisproduct nMet lijstcomprehensie nMet 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

Ontwerp van functies op lijsten nCombineer standaardfuncties nHerken je een,, of zoiets? Schrijf dan eerst de hulpfunctie nGebruik expliciete recursie mapfilterfoldr f [ ] =... f (x:xs) =... f xs...

Voorbeeld 1 nEen string afpassen op een gegeven lengte afkappen, of aanvullen met spaties precies :: Int  String  String precies n s | n < len= | n == len= | n > len= where len = length s take n s s s ++ replicate (n-len) ’_’

Voorbeeld 2 nEen heleboel strings afpassen op lengte > evenlang 4 [ ”aap”, ”noot”, ”weide” ] [ ”aap_”, ”noot”, ”weid” ] evenlang :: Int  [String]  [String] evenlang n xs = map f xs where f x = precies n x evenlang n xs = map (precies n) xs

Voorbeeld 3 nStrings even lang maken zonder afkappen > uniform [ ”aap”, ”noot”, ”weide” ] [ ”aap__”, ”noot_”, ”weide” ] uniform :: [String]  [String] uniform xs = evenlang n xs where n = maximum (map length xs)

Voorbeeld 4 nKolommen afpassen in blok van strings > unikol [[ ” aap ”,” noot ”,” mies ” ], [ ” wim ”,” zus ”,” jet ” ], [ ” weide ”,” hok ”,” schapen ”] ] [[ ” aap__ ”,” noot ”,” mies___ ” ], [ ” wim__ ”,” zus_ ”,” jet____ ” ], [ ” weide ”,” hok_ ”,” schapen ” ] ]

Kolommen uniformeren jetzuswim miesnootaap schapenhokweide unikol xss= map uniform xss

Kolommen uniformeren jetzuswim miesnootaap schapenhokweide unikol xss= map uniform xss

Kolommen uniformeren jetzuswim miesnootaap schapenhokweide unikol =

Kolommen uniformeren jetzuswim miesnootaap schapenhokweide unikol = wissel

Kolommen uniformeren jetzuswim miesnootaap schapenhokweide unikol = map uniform. wissel

Kolommen uniformeren jetzuswim miesnootaap schapenhokweide unikol = wissel. map uniform. wissel

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

Wissel wissel (xs : xss) = zipWith (:) xs (wissel xss) wissel [ ] = 3 rijen van elk 5 elementen  5 rijen van elk 3 elementen 2 rijen van elk 5 elementen  5 rijen van elk 2 elementen 1 rij van elk 5 elementen  5 rijen van elk 1 element 0 rijen van elk 5 elementen  5 rijen van elk 0 elementen veel oneindig repeat [ ] wissel = foldr......

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