PROGRAMMEREN LOGISCH en FUNCTIONEEL Ik zeg wat ik denk!

Slides:



Advertisements
Verwante presentaties

Advertisements

Computertechniek Hogeschool van Utrecht / Institute for Computer, Communication and Media Technology 1 Operatoren, Arrays, Command-line tools.

Inleiding programmeren in C++ Life Science & Technology 1 maart Universiteit Leiden.
Hoofdstuk 1 Programmeren.
Deel I: Functionele Programmeertalen Hoofdstuk 4: Functioneel Programmeren.
Uitwerking tentamen Functioneel Programmeren 29 januari 2009.
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.
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.
Programmeerparadigma’s
Hoofdstuk 6: Controle structuren
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.
Hoofdstuk 1 Programmeren.
Hoofdstuk 2 Hallo, C# !.
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.
Numerieke Natuurkunde
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.
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
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.
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.
CONTROLESTRUCTUREN (DEEL 1)
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;
tircms02-p les 1 Operating Systems practicum
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,
JAVA: een platformonafhankelijke taal
Functioneel programmeren Een snelle herhaling…. Functie-definitie static int kwad (int x) { return x*x ; } kwad x = x * x Haskell kwad :: Int  Int.
Tircms03-p les 1 C++ voor C-kenners Voor Technische Informatica.
(S)DT Haskell Functioneel programmeren.
Hoofdstuk 3 Methoden om te tekenen.
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.
Java Objectgeoriënteerd Programmeren in Java met BlueJ
Imperatief programmeren nJeroen Fokker. Wat heb je nodig? nCollegediktaat ukopen bij A-Eskwadraat (BBG-238) uof zelf downloaden en uitprinten nSolis-id.
Mobiel programmeren Jeroen Fokker.
Aangepaste timing nTheorie (16 colleges + 2 deeltentamens) nPraktijk (16 keer, 3 inleveropdrachten) college Tent. 1 Tent. 3 college prakt. 1 prakt. 3 prakt.
Resources. Kompas } { protected override void OnDraw(Canvas canv) { base.OnDraw(canv); } public KompasView(Context c) : base(c) { } class KompasView :
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.
Informatica Welkom! maandag 16 November Les B-1.
Imperatief programmeren
Aanroep van een methode voert opdrachten uit in de body daarvan
Gameprogrammeren: Objecten en geheugen
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
Syntax van opdracht opdracht naam naam ( expressie ) ; . , expressie
Voorbeeld: Simulatie van bewegende deeltjes
Opdrachten herhalen public void tekenScherm (object o, PEA pea)
Aanroep van een methode voert opdrachten uit in de body daarvan
Object Communication (Jewel Jam)
Software Development fundamentals
Gameprogrammeren: Arrays
Transcript van de presentatie:

PROGRAMMEREN LOGISCH en FUNCTIONEEL Ik zeg wat ik denk!

Opbouw nDeel 1: Functioneel programmeren docent: Jeroen Fokker (informatica) tot de kerstvakantie (week 47-51) nDeel 2: Logisch programmeren docent: Louis des Tombe (letteren) na de kerstvakantie (week 2-5)

deel 1: Functioneel programmeren H1H2 H3.1H3.2 H4H5.1 H5.2 App. A tentamen Pr.1 Pr.2

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

Geschiedenis van programmeertalen Lisp Prolog Assembler Mach.taal Fortran Algol Basic Pascal Simula C C++ Java C# Haskell Gofer Miranda Scheme ImperatiefFunctioneelLogisch

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

Compilers voor Haskell nHelium nHugs (Haskell User’s Gofer System) nGHC (Glasgow Haskell Compiler)

Helium nCompiler èn interpreter nVereenvoudigd type-systeem nBegrijpelijke foutmeldingen nUtrechts nGloednieuw nExperimenteel

Helium-interpreter H:\> hi > > sqrt > * 3 11 > sin 0.3 *. sin cos 0.3 *. cos functie uit de standaard prelude Int - operatoren Float - operatoren

Lijsten nLijst: rijtje elementen van hetzelfde type [ 1, 3, 8, 2, 5 ] vierkante haken [ ] “tot en met”

Functies op lijsten > sum [1.. 10] 55 > reverse [3.. 8] [8, 7, 6, 5, 4, 3] > length [1, 5, 9, 3] 4 > replicate 5 2 [2, 2, 2, 2, 2]

Zelf functies definiëren module Statistiek where n! = 1*2*...*n ( ) n k n!n! k! (n-k)! = fac n = product [1..n] boven n k = fac n / (fac k * fac (n-k))

Functie-definitie static int fac (int n) { int tel, res; res = 1; for (tel=1; tel<=n; tel++) res *= tel; return res; } fac n = product [1..n] Haskell fac :: Int  Int

Gebruik van functies nMet de interpretern Met de compiler module Stat where fac n = product [1..n] module Stat where fac n = product [1..n] main = fac 6 H:\> hi > :l Stat > fac H:\> helium Stat.hs H:\> lvmrun Stat 720

Soorten definities nFunctie nConstante nOperator fac :: Int  Int fac n = product [1..n] pi :: Float pi = ( !^! ) :: Int  Int  Int n !^! k = fac n / (fac k * fac (n-k))

Prelude: functies op Int nRekenkundige operatoren nVergelijkings- operatoren nFuncties + - * / ^ == /= >= abs signum gcd

Prelude: functies op Float nRekenkundige operatoren nVergelijkings- operatoren nFuncties *. /. ^. ==. /=.. >=. sqrt sin log exp truncate

Prelude: functies op Bool nLogische combinaties nFuncties && || not

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]

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

Functies met meer parameters nmet een lijst als resultaat boven :: Int  Int  Int boven n = fac n / (fac k * (fac (n-k)) omtrekOppervl :: Int  Int  [Int] omtrekOppervl len br = [ 2*(len+br), len*br ]

Hergebruik deel-formules ngeef de deelformules een naam abc :: Float  Float  Float  [Float] abc a b c = [ (-b +sqrt(b*b-4*a*c)) / (2*a), (-b - sqrt(b*b-4*a*c)) / (2*a) ] abc a b c = [ ( -b +d ) / n, ( -b - d ) / n ] d = sqrt (b*b – 4*a*c) n = 2*a where

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

Definitie met patronen dag :: Int  String dag 1 = “maandag” dag 2 = “dinsdag” dag 3 = “woensdag” dag 4 = “donderdag” dag 5 = “vrijdag” dag 6 = “zaterdag” dag 7 = “zondag” constante als formele parameter!

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

Patronen èn recursie sum :: [Int]  Int sum [ ] = 0 sum (x:xs)= x + sum xs length :: [Int]  Int length [ ]= 0 length (x:xs)= 1 + length xs

Het type van length length :: [Int]  Int length [ ]= 0 length (x:xs)= 1 + length xs [a]  Int “polymorf” null:: [a]  Bool head:: [a]  a tail:: [a]  [a]

Publieksvraag: Het type van map map :: > map fac [1, 2, 3, 4, 5] [1, 2, 6, 24, 120] > map even [1.. 6] [False, True, False, True, False, True]  [a] (a  b) [b]

Practicum nzaal 408 en 412 (2 personen per computer) BBL

Website