De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

PROGRAMMEREN LOGISCH en FUNCTIONEEL Ik zeg wat ik denk!

Verwante presentaties


Presentatie over: "PROGRAMMEREN LOGISCH en FUNCTIONEEL Ik zeg wat ik denk!"— Transcript van de presentatie:

1 PROGRAMMEREN LOGISCH en FUNCTIONEEL Ik zeg wat ik denk!

2 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)

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

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

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

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

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

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

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

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

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

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

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

14 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]

15 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))

16 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

17 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

18 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))

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

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

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

22 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]

23 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]

24 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]

25 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

26 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 ]

27 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

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

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

30 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!

31 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

32 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

33 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]

34 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]

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

36 Website


Download ppt "PROGRAMMEREN LOGISCH en FUNCTIONEEL Ik zeg wat ik denk!"

Verwante presentaties


Ads door Google