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.

Slides:



Advertisements
Verwante presentaties
Inleiding programmeren in C++ Life Science & Technology 1 maart Universiteit Leiden.
Advertisements

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.
Hogere-ordefuncties nEen lijst langs lopen en met elk element iets doen nEen lijst langs lopen en sommige elementen selecteren map filter.
Reductiemachine Functionele talen en dus de -calculus, worden vaak geïmplementeerd door een reductiemachine. De elementaire stap is een reductie, en de.
Eigenschappen van het vermenigvuldigen van gehele getallen
 - congruentie -regel:
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.
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::
Inleidend probleem Data structuur (hiërarchie van classes)
Functies als Getallen Jan Martin Jansen.
Trillingen en golven Sessie 8.
Flow controle Keuzes maken. Het if-statement Soms moet code alleen in bepaalde situaties uit gevoerd worden Hiervoor heeft C de if-else constructie: if(voorwaarde1){
-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.
Opg.1a: substring } String substring(int a) { int t; for (t=a; t
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)
Delft University of Technology denkeenheden letters vormen woorden woorden vormen zinnen zinnen vormen verhalen stenen vormen muren muren vormen huizen.
LauwersCollege Buitenpost Java Applet programma dat op een website zichtbaar is Java Application programma dat zelfstandig werkt Javascript Scripttaal.
Opgave 1a: void nvoid staat in de header van een methode die geen resultaatwaarde heeft nde aanroep van een void-methode is dan een opdracht i.p.v. een.
1 Datastructuren Een informele inleiding tot Skiplists Onderwerp 13.
Boomerang.
PHP & MYSQL LES 02 PHP & FORMULIEREN. PHP & MYSQL 01 PHP BASICS 02 PHP & FORMULIEREN 03 PHP & DATABASES 04 CMS: BEST PRACTICE.
Inleiding Informatica Prof. Dr. O. De Troyer Hoofdstuk 3: Werken met numerieke gegevens.
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.
SQL ( SERVER ) Les #02: T-SQL. A GENDA Herhaling les 4 Views SELECT…INTO Beheren van tabellen: CREATE ALTER DROP Opdracht voor de volgende les.
Tircms03-p les 6 Templates. Functietemplates void verwissel(int &x, int &y); { int w=x;x=y;y=w;} Dezelfde functie voor meerdere types heet een functietemplate.
Hoorcollege 14 Vijanden, excepties. Overzicht programmaconstructies Opdrachten Toekenning Aanroep void-methode return-opdracht while-opdracht for(each)-opdracht.
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.
Tircms03-p les 2 Hfdst 3,4 Meer operatoren Functies.
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.
tircms02-p les 1 Operating Systems practicum
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.
Beslissingen. Inhoud: Booleaanse expressies: wat? Booleaanse expressies: wat? Relationele en logische operatoren Relationele en logische operatoren De.
(S)DT Haskell Functioneel programmeren.
(S)DT Haskell Deel 2 list comprehensions, types en type klassen, programma transformatie, I/O.
Hoofdstuk 11 Strings en arrays. TextArea en String class LetterTeller extends Applet { void init ( ) { invoer = new TextArea (5, 40); uitvoer = new TextField(40);
Definitie Taal van een grammatica nZij grammatica G = ( T, N, R, S ) nde taal van G is { z  T* | S  * z } L(G)
Hoofdstuk 4 Nieuwe methoden. Tekenen g.drawRect(20,60,40,40); g.drawLine(20,60,40,40); g.drawLine(40,40,60,60); g.drawRect(70,60,40,40); g.drawLine(70,60,90,40);
1 PI1 week 9 Complexiteit Sorteren Zoeken. 2 Complexiteit van algoritmen Hoeveel werk kost het uitvoeren van een algoritme (efficiëntie)? –tel het aantal.
Aangepaste timing nTheorie (16 colleges + 2 deeltentamens) nPraktijk (16 keer, 3 inleveropdrachten) college Tent. 1 Tent. 3 college prakt. 1 prakt. 3 prakt.
Les 3 - Operators Workshop Php Basic. ICT Academy Php Basic Content Operators Wiskundig Toewijzing Vergelijking.
Na de praktijk, de theorie.. Zoals een gehaktmolen 1.Je stopt er iets in. 2.Je hoeft niet te weten wat er binnenin gebeurt. 3.Het resultaat verschijnt.
Cyclometrische functies
GUI & classes Een Gui in een class steken en het object gebruiken.
IF() ELSE() LES 4: VOORWAARDEN. BOOL Een variabele die slechts 2 mogelijke waarden kan hebben: true(waar) of false(niet waar) duid je aan met bool bool.
Informatie beoordelen If else Switch En Wiskunde.
Aanroep van een methode voert opdrachten uit in de body daarvan
Gameprogrammeren: Keuzeopdrachten
Hoofdstuk 9.2 Strings.
Gameprogrammeren: Expressies
Tinpro015b-les 1 C++ voor C-kenners Voor Technische Informatica.
Tinpro015b-les5 Invoer en Uitvoer.
Tinpro015b-les3 Hfdst 3,4 Meer operatoren Functies.
Opdrachten herhalen public void tekenScherm (object o, PEA pea)
-calculus versus Scheme
ASP.NET MVC Web Development
Implementatie Zoekboom
Gameprogrammeren: Enemies in Tick Tick
TOP met iTasks 2.
Python – For loop + strings
Transcript van de presentatie:

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 [a] doe dit pak deze combineer zo

Currying nType nAanroep f :: Int  Bool  String > f 7 True “hoi” f 7 Bool  String  rechts-associatief links-associatief zonder haakjes!

Zelftest nGegeven nSchrijf sum en sorteer m.b.v. foldr sum[ ]= 0 sum (x:xs)= x + sum xs sorteer [ ]= [ ] sorteer (x:xs)= insert x (sorteer xs) sumxs= foldr (+) 0 xs sorteerxs= foldr insert [ ] xs

Andere hogere-ordefuncties until :: (a  Bool)  (a  a)  a  a begin hiermee doe dit totdat dit geldt > until ((<)1000) ((*)2) until p f x = | p x | True = x (f x) until p f

Andere hogere-ordefuncties (.) ::    begin hiermee doe dit en dan dat > filter (not. even) [1, 2, 3, 4, 5, 6] [1, 3, 5] (.) g f x = g (f x) a (a  b) (b  c) c (a  c)

Partieel parametriseren > map (plus 5) [1.. 5] [6, 7, 8, 9, 10] > until ((<)1000) ((*)2) > filter (not. even) [1.. 5] [1, 3, 5]

Partieel parametriseren > map f [1.. 4] where f x = x*x + 3*x + 2 [6, 12, 20, 30] > map f [1.. 4] [6, 12, 20, 30] ( \ x  x*x+3*x+2 )

Lambda-expressies x*x + 3*x + 2 expressie waar x vrij in voorkomt \ x  de functie die die expressie uitrekent

Lambda ? x. x*x + 3*x + 2    x. x*x + 3*x + 2 x. x*x + 3*x + 2 (LAMBDA x)( x*x + 3*x + 2 ) \ x  x*x + 3*x + 2 \ x -> x*x + 3*x + 2

Lijsten maken nTwee fundamentele manieren [ ] :: [a] (:) :: a  [a]  [a] nDaarom ook twee patronen in definities f [ ] =... f (x:xs)=...

Lijsten maken: afkortingen nOpsomming nVan... tot en met... [ ]:: [Int] [ 10, 8,.. 0 ]:: [Int] [ 2.. ]:: [Int] [True, False, True]:: [Bool] [sin, cos, tan]:: [Float  Float] [ [1,2,3], [1,2] ]:: [ [Int] ] oneindig!

Functies op lijsten > [4, 6, 1] ++ [2, 4] [4, 6, 1, 2, 4] (++) :: [a]  [a]  [a] [ ] ++ ys= ys (x:xs) ++ ys= x : (xs++ys)

Functies op lijsten > concat [ [3, 4, 5], [ ], [1, 2], [6] ] [3, 4, 5, 1, 2, 6] concat :: [[a]]  [a] concat [ ]= [ ] concat (xs:xss)= xs ++ concat xss concat xss= foldr (++) [ ] xss

Functies op lijsten head[ ]= head(x:xs)= x tail(x:xs)= xs init(x:[ ])= [ ] init(x:xs)= x : init xs last(x:[ ])= x last(x:xs)= last xs

Functies op lijsten take, drop :: Int  [a]  [a] take 0 xs= [ ] take n [ ]= [ ] take n (x:xs)= x : take (n-1) xs drop 0 xs= xs drop n [ ]= [ ] drop n (x:xs)= drop (n-1) xs

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 [a] doe dit pak deze combineer zo

Het type van foldr sum[ ]= 0 sum (x:xs)= x + sum xs sum = foldr (+) 0 length [ ]= 0 length (x:xs)= 1 + length xs length = foldr f 0 where f elem rest = 1 + rest foldr :: (a  a  a)  a  [a]  a b (a  b  b) b

Functies op lijsten > filter even [2, 4, 1, 6, 3, 8] [2, 4, 6, 8] filter :: (a  Bool)  [a]  [a] filter p [ ] = [ ] filter p (x:xs)| p x = x : filter p xs | True = filter p xs

Functies op lijsten > takeWhile even [2, 4, 1, 6, 3, 8] [2, 4] takeWh :: (a  Bool)  [a]  [a] takeWh p [ ] = [ ] takeWh p (x:xs) | p x = x : takeWh p xs | True = [ ]

Functies op lijsten > dropWhile even [2, 4, 1, 6, 3, 8] [1, 6, 3, 8] dropWh :: (a  Bool)  [a]  [a] dropWh p [ ] = [ ] dropWh p (x:xs) | p x = dropWh p xs | True = x : xs

Lijsten vergelijken nLijsten zijn gelijk als uelementen gelijk uvolgorde gelijk eqListInt:: [Int]  [Int]  Bool eqListInt [ ][ ] = eqListInt [ ](y:ys) = eqListInt (x:xs)[ ] = eqListInt (x:xs)(y:ys) = True False x==y && eqListInt xs ys

Lijsten polymorf vergelijken nExtra functie meegeven eqList :: (a  a  Bool)  [a]  [a]  Bool eqList eq [ ][ ] = eqList eq [ ](y:ys) = eqList eq (x:xs)[ ] = eqList eq (x:xs)(y:ys) = True False eq x y && eqList eq xs ys

Lijsten vergelijken > eqList (==) [1,2,3] [1,2,3] True > eqList (eqBool) [True,False] [True] False > eqList (eqList (==)) [[1,2], [3,4]] [[1,2], [4,3]] False

Samenvatting Functies op lijsten n[ ] (:) (++) concat nhead tail init last take drop nfilter takeWhile dropWhile nmap foldr nrepeat replicate iterate neqList ordList