Imperatief programmeren nProgramma bestaat uit nRunnen is opdrachten gegroepeerd in methoden één voor één uitvoeren te beginnen met main.

Slides:



Advertisements
Verwante presentaties

Advertisements


Inleiding programmeren in C++ Life Science & Technology 1 maart Universiteit Leiden.
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.
Instructie Programmeren Task 8 5JJ70. PAGE 2 Task 8: Double Linked List Het doel van deze opdracht is: Het opbouwen van een tweetal klassen, die samen.
Van domeinklasse tot implementatie
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.
Het ontwerpen van een klasse
Modula vs Java MODULE Show; CONST PI = ; TYPE PointRc = RECORD x,y : INTEGER; speed : REAL; angle : REAL; END; VAR a,b : PointRc; BEGIN.
Hoofdstuk 6: Controle structuren
 - congruentie -regel:
1 SOCS Hoofdstuk 1 Programmeertaal C. 2 Kenmerken van C Hogere programmeertaal  Grote verzameling types, strenge type controle  Zelf nieuwe types definiëren.
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::
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.
Functies als Getallen Jan Martin Jansen.
Numerieke Natuurkunde
-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.
Functioneel Programmeren Daan Leijen. Wat gaan we doen? 3 fundamentele principes van computatie Equationeel redeneren IO-monad GUI's in Haskell (wxHaskell)
Static Keyword static voor functieleden functie niet voor een object aangeroepen class K {... static int minimum( int i, int j); } aanroep: K::minimum(
JAVA -- H51 CONSTRUCTOR –- COPY-CONSTRUCTOR 1Constructor: Dezelfde naam als de klasse Wordt uitgevoerd d.m.v. new Initialisatie van de (private) attributen.
Algoritmiek Object-georiënteerd Programmeren
6.1 Inleiding HOOFDSTUK 6 METHODEN
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.
OO Analyse in de praktijk OO Analyse in de praktijk V Enkele Design Patterns.
PHP & MYSQL LES 02 PHP & FORMULIEREN. PHP & MYSQL 01 PHP BASICS 02 PHP & FORMULIEREN 03 PHP & DATABASES 04 CMS: BEST PRACTICE.
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.
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.
CONTROLESTRUCTUREN (DEEL 1)
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 3 Functies Strings Structuren. Functies 1. main() 2. { int k; k = 10 ; printf(“%d\n”,fac(k)); } 3. int fac(n) int n; 4. { int f; f= 1;
Tircms03-p les 4 Klassen. Abstracte datatypes in C struct stack { char info[100]; int top; }; void reset(stack *s) { s->top = -1; } void push(stack *s,
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.
(S)DT Haskell Functioneel programmeren.
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.
Java Objectgeoriënteerd Programmeren in Java met BlueJ
Aangepaste timing nTheorie (16 colleges + 2 deeltentamens) nPraktijk (16 keer, 3 inleveropdrachten) college Tent. 1 Tent. 3 college prakt. 1 prakt. 3 prakt.
Welkom! maandag 16 November 2015 Les B-2.
1 februari 2016 PHP expressie statement. 1 februari 2010 Titel van de presentatie 2 Boole logica? Definitie De booleaanse operatoren zijn genoemd naar.
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
Windows-applicatie using System.Windows.Forms; using System.Drawing;
Tinpro015b-les 1 C++ voor C-kenners Voor Technische Informatica.
Gameprogrammeren: Herhalingen
Tinpro015b-les3 Hfdst 3,4 Meer operatoren Functies.
Syntax van opdracht opdracht naam naam ( expressie ) ; . , expressie
Voorbeeld: Simulatie van bewegende deeltjes
Gameprogrammeren: Recursie
Opdrachten herhalen public void tekenScherm (object o, PEA pea)
Aanroep van een methode voert opdrachten uit in de body daarvan
-calculus versus Scheme
Implementatie Zoekboom
Transcript van de presentatie:

Imperatief programmeren nProgramma bestaat uit nRunnen is opdrachten gegroepeerd in methoden één voor één uitvoeren te beginnen met main

Functioneel programmeren nProgramma bestaat uit nRunnen is functie-definities uitrekenen van een expressie

Logisch programmeren nProgramma bestaat uit nRunnen is predicaat-definities proberen te vervullen van een predicaat

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

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

Functies definiëren nDoor 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

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

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

Functies als parameter nPas functie toe op alle elementen 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, , , 2.0] > map even [1.. 6] [False, True, False, True, False, True]

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

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

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

Zelftest nDefinieer de recursieve functie umet patronen umet gevalsonderscheid d.m.v. guards sum 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)

Quiz (basisschool) * 2 3 * ^ 3 ^ ^ 2 machtsverheffen prioriteitsregel associatief links-associatief rechts-associatief

Quiz (logica) F  T  F F F  T  F TT F  T  F T  F implicatie F associatief rechts-associatief TF

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

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

Partieel parametriseren nStel: nEn dan: plus :: Int  Int  Int plus x y = x + y drieMeer :: Int  Int drieMeer = plus 3 > map drieMeer [1, 2, 3, 4, 5] [4, 5, 6, 7, 8]

Partieel parametriseren nOmgekeerd: nEn dus: plus :: Int  (Int  Int) drieMeer = plus 3 drieMeer :: Int  Int plus :: Int  Int  Int rechts-associatief

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

Currying nHaskell B. Curry ( ) nGrundlagen der kombinatorischen Logik (1930) nM. Schönfinkel Über die Bausteine der mathematischen Logik (1924) Schönfinkeling?

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]

Hogere-ordefuncties nFunctie met een functie als parameter nFunctie met een functie als resultaat map inverse afgeleide elke functie met >1 parameter! filter

Hogere-ordefuncties nEen lijst langs lopen en met elk element iets doen nEen lijst langs lopen en sommige elementen selecteren map filter

map en filter > 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] doe dit overal pak alleen deze

Publieksvraag nSchrijf een functie die getallen van een lijst oplevert die kleiner zijn dan 10 kleintjes kleintjes :: [Int]  [Int] kleintjes xs = filter (<10) xs ook partieel geparametriseerd!

Definitie van map nGeef een recursieve definitie: map :: (a  b)  [a]  [b] map f [ ]= map f (x:xs)= [ ] map f xsf x :

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