2IA05 Functioneel Programmeren

Vergelijkbare documenten
2IA05 Functioneel Programmeren

Wat is FP? The Haskell School of Expression. Functies. Types 1+1=2. Iedere expressie (en waarde) heeft een type.

inleiding theoretische informatica practicum 1 deadline woensdag 20 februari 2008 om uur

start -> id (k (f c s) (g s c)) -> k (f c s) (g s c) -> f c s -> s c

equationeel programmeren college 1

FP-theorie. 2IA50, Deel B. Inductieve definities 1/19. / department of mathematics and computer science

Leeswijzer Functioneel Programmeren

Functies (een korte inleiding)

Verzamelingen, Lijsten, Functioneel Programmeren

Verzamelingen, Lijsten, Functioneel Programmeren

Haskell: programmeren in een luie, puur functionele taal

Inleiding tot Func.oneel Programmeren les 3

Verzamelingen, Lijsten, Functioneel Programmeren

1 Inleiding in Functioneel Programmeren

Vergelijkingen van cirkels en lijnen

Modelleren en Programmeren

Automaten en Berekenbaarheid

Semantiek (2IT40) Bas Luttik. HG 7.14 tel.: Hoorcollege 8 (7 juni 2007)

Constanten. Variabelen. Expressies. Variabelen. Constanten. Voorbeeld : varid.py. een symbolische naam voor een object.

Introductie tot de cursus

Law and Order in Algorithmics

Calculus TI1 106M. I.A.M. Goddijn, Faculteit EWI 1 september 2014

Als een PSD selecties bevat, deelt de lijn van het programma zich op met de verschillende antwoorden op het vraagstuk.

Imperatief programmeren. Introductie 9. Leerkern 10. Zelftoets 15. Terugkoppeling 16. Inhoud leereenheid 16

Syntax- (compile), runtime- en logische fouten Binaire operatoren

I.3 Functies. I.3.2 Voorbeeld. De afbeeldingen f: R R, x x 2 en g: R R, x x 2 zijn dus gelijk, ook al zijn ze gegeven door verschillende formules.

Korte handleiding Maple, bestemd voor gebruik bij de cursus Wiskunde

Modelleren en Programmeren

Lineaire afbeeldingen

Helden van de wiskunde: L.E.J. Brouwer Brouwers visie vanuit een logica-informatica perspectief

Wiskundige Technieken 1 Uitwerkingen Tentamen 4 november 2013

Scala. Korte introductie. Sylvia Stuurman

FUNCTIONEEL PROGRAMMEREN WEEK 1

Overzicht Fourier-theorie

Didactische wenken bij het onderdeel analyse

zijn er natuurlijke getallen x,y,z > 0 zodat 4xyz = n(xy + yz + zx)? (1)

Lineaire algebra I (wiskundigen)

Topologie I - WPO Prof. Dr. E. Colebunders Dr. G. Sonck 24 september 2006

Tuyaux 3de Bachelor Wiskunde WINAK

Beheerste transformatie met behulp van Enterprise Architectuur

Functioneel Programmeren

(10 pnt) Bepaal alle punten waar deze functie een relatief extreem of een zadelpunt heeft. Opgave 3. Zij D het gebied gegeven door

Oefening 2.2. Welke van de volgende beweringen zijn waar?

TENTAMEN WISKUNDIGE BEELDVERWERKINGSTECHNIEKEN

Kennisrepresentatie & Redeneren. Piter Dykstra Instituut voor Informatica en Cognitie

Functioneel Programmeren

Vrije Universiteit Faculteit der Economische Wetenschappen en Bedrijfskunde Afdeling Econometrie

CTB1002 deel 1 - Lineaire algebra 1

Inleiding C++ Coding Conventions

Programmeren in Java 3

De wortel uit min één, Cardano, Kepler en Newton

OEFENINGEN PYTHON REEKS 1

4051CALC1Y Calculus 1

Hoofdstuk 10: Partiële differentiaalvergelijkingen en Fourierreeksen

Inleiding Programmeren 2

Functioneel programmeren met Helium

Inleiding Programmeren 2

Les 7 & 8: MSW Logo Mieke Depaemelaere

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

6 Complexe getallen. 6.1 Definitie WIS6 1

Datastructuren Programmeeropdracht 3: Expressies. 1 Expressies. Deadline. Dinsdag 8 december 23:59.

Python. Vraag 1: Expressies en types. Vraag 1 b: Types -Ingebouwde functies- Vraag 1 a 3/10/14

Functioneel Programmeren met Helium

Ruimtewiskunde. college. De determinant en lineaire afbeeldingen. Vandaag. De determinant van een matrix. Toepassing: oppervlakte en inhoud

Reeksnr.: Naam: t 2. arcsin x f(t) = 2 dx. 1 x

Datastructuren: stapels, rijen en binaire bomen

Mathematical Modelling

Wiskunde. Verzamelingen, functies en relaties. College 2. Donderdag 3 November

Modeleren. Modelleren. Together UML. Waarvan maken we een model? overzicht les 14 t/m 18. ControlCenter 6.2

Tentamen Grondslagen van de Wiskunde A Met beknopte uitwerking

18.I.2010 Wiskundige Analyse I, theorie (= 60% van de punten)

De volgorde bij samengestelde reken-wiskunde bewerkingen

NHibernate als ORM oplossing

Object Oriented Programming

Inhoudsopgave. Relaties geordend paar, cartesisch product, binaire relatie, inverse, functie, domein, bereik, karakteristieke functies

Paragraaf 5.1 : Machten en wortels

Inleiding Programmeren 2

Ontwikkeling van het functiebegrip in: Wiskunde als Wetenschap

Verzamelingen. Hoofdstuk 5

Optelling en scalaire vermenigvuldiging zijn weer plaatsgewijs gedefinieerd, bijvoorbeeld: 7 (x 1, x 2, x 3,...)

ANALYSEQUIZ Ga naar new.shakeq.com en log in met de code uvaanalyse2a

1 Recurrente betrekkingen

Geef niet alleen antwoorden, maar bewijs al je beweringen.

6. Lineaire operatoren

Hoofdstuk 9. Vectorruimten. 9.1 Scalairen

Programmeren in Java

Transcriptie:

2IA05 Functioneel Programmeren wk1: Introductie Rik van Geldrop, Jaap van der Woude

Declaratieve programmeerstijl 2/13 2 H C H = A A H I JE A 1 F A H = JEA B, A? = H = JEA B D A M = J. K? JE A A C EI? D J A I J= @ I L A H= @ A HE C E @ A JE @? A? JEA BK? JEA @ A BE EJEA I? A? JEA F HA @ E? = = J @ A BE EJEA I

FP-wetenswaardigheden 3/13 Berust op wiskundige theorie (λ-calculus, herschrijfsysteem). Functies als argument/resultaat mogelijk (first class citizens). Functies met één argument: Currying. Type en Structuur zijn de leidraad bij ontwerp en analyse. Redeneren over programma s/functies d.m.v. equational reasoning: constructie/verificatie/transformatie/executie. Recursie i.p.v. repetitie. Compacte programma s/specificaties. (Haskell) Type-systeem ondersteunt Polymorfie/Overloading. (Haskell) Lazy evaluation.

Notatie en terminologie 4/13 Bij voorkeur de gebruikelijke wiskundige notatie voor functies (met applicatie en compositie als elementaire operaties), maar voor implementatie doeleinden Haskell (herkenbaar aan teletype font ). Applicatie-voorbeeld: een puntsgewijze definitie van kwadrateren wiskunde sqr.x = x x of sqr(x) = x 2 (twice.f).x = f.(f.x) haskell sqr x = x * x twice f x = f (f x) Compositie-voorbeeld: een puntvrije definitie van 4 e -machtsverheffing wiskunde quad = sqr sqr haskell quad = sqr.sqr

Notatie en terminologie 5/13 In dit vak gaan we rekenen met functies. Puntsgewijs, maar ook puntvrij. De belangrijkste operatie hierbij is functie-gelijkheid: Definitie [Extensionaliteit] Voor alle functies f en g met hetzelfde domein geldt f = g x :: f.x = g.x Een andere nuttige operatie heet λ-abstractie: Definitie[λ-abstractie] Als x een variabele is van type X and E een expressie van type Y, dan heet (λx E) een λ-abstratie. Verder geldt en (λx E) X Y (λx E).a = E(x := a) voor alle a X I.h.b. f = λx f.x (simplificatie)

puntsgewijs <-> puntvrij 6/13 Gebruik extensionaliteit en λ-abstractie. Van puntvrij naar puntsgewijs: extensionaliteit: Voor alle x quad.x = (sqr sqr).x = {def compositie } sqr.(sqr.x) Van puntsgewijs naar puntvrij: λ-abstractie en/of extensionaliteit: sqr = λ x x x en

puntsgewijs <-> puntvrij 7/13 (twice.f).x = = { abstractie } f.(f.x) twice.f = λx f.(f.x) = { compositie } twice.f = λx (f f).x = { simplificatie } twice.f = f f = { abstractie } twice = λf f f

Notationele conventies 8/13 Reduceer haakjes door het gebruik van de volgende conventies Applicatie heeft de hoogste prioriteit, dus f g.x = f (g.x) Applicatie associeert naar links, dus f.g.h = (f.g).h Abstractie associeert naar rechts, dus λx λy E = λx (λy E)

Secties: speciale λ-abstracties Zij X Y Z, x X en y Y, dan 9/13 x y Z Door λ-abstractie, bijvoorbeeld over y, ontstaat λy x y Y Z bij vaste x Bij applicaties van deze functie verandert alleen het 2 e argument, i.e (λy x y).a = x a Gebruikelijke afkorting is (x ) sectie van Idem voor ( y)

Type, polymorfie, overloading 10/13 basis 1 unit type (singleton set) samengesteld: Voor typen A en B A B functieruimte A B cartesisch product met projecties π 1 en π 2 A + B disjuncte som met injecties/constructoren in 1 en in 2 Polymorfie Een polymorfe functie is één functie die op verschillende typen kan worden toegepast.voorbeeld: swap.(x, y) = (y, x) Overloading Er is sprake van overloading als er aan verschillende functies dezelfde naam gegeven wordt. De keuze van de juiste definitie wordt gemaakt op grond van beschikbare environment-informatie. Voorbeeld: =

Curry en uncurry 11/13 Currying is een functietransformatie die de isomorfie X Y Z = X (Y Z) aangeeft. De constructie 1. Bepaal (uit de typering!) een functie, genaamd curry curry : (X Y Z) (X (Y Z)) 2. Bepaal (uit de typering!) een functie, genaamd uncurry uncurry : (X (Y Z)) (X Y Z) 3. Ga na dat curry uncurry = id en uncurry curry = id

Curry en uncurry 12/13 Vanwege de isomorfie is het onbelangrijk welke view op functietypering gekozen wordt. In de wiskunde is een ongecurriede versie gebruikelijk. Bijvoorbeeld + Z Z Z en +.(2, 3) Functionele talen prefereren een gecurriede versie omdat daarbij slechts een argument nodig is om voortgang van evaluatie/programmaexecutie te bewerkstelligen. In Haskell: (+) :: Int -> Int -> Int en (+) 2 3 met verband (+) = curry.+

Haskell classes 13/13 Eq Show Read Ord Num Bounded Enum Real Fractional Integral RealFrac Floating RealFloat Monad Functor