Deel I: Functionele Programmeertalen Hoofdstuk 4: Functioneel Programmeren
Functies De equivalente -uitdrukking: Functienotatie:
Voorwaardelijke functies De equivalente -uitdrukking
Patroonherkenning De equivalente -uitdrukking
Lijsten Miranda-notatie: [ ] [1,2,3] e : l hd l tl l
Lijsten De equivalente -uitdrukking
Lijsten De equivalente -uitdrukking
Functies op lijsten a ++ b concatenatie hd a eerste element van de lijst a tl a staart van de lijst a (lijst zonder kop) length a lengte van de lijst a take n a lijst met eerste n elementen van lijst a drop n a lijst zonder de eerste n elementen van lijst a prefix n a lijst met eerste n elementen van lijst a
Functies op lijsten suffix n a lijst met laatste n elementen van lijst a takewhile c a maximaal prefix van lijst a waarvoor c geldt dropwhile c a lijst na het droppen van kop- elementen waarvoor c geldt reverse a lijst van elementen van lijst a in omgekeerde volgorde zip a b lijst met koppels uit a en b, in dezelfde volgorde
Functies op lijsten product a b scalair product van de lijsten a en b position a x positie van x in lijst a map f a lijst met f toegepast op de elementen van a filter f a lijst met de elementen van a waarvoor f a waar is
Generische lijstfuncties
Functie let-in De equivalente -uitdrukking voor let x = M in N : ( x. N ) M met applicatieve evaluatievolgorde
Functie where De equivalente -uitdrukking voor N where x = M : ( x. N ) M
Functie where De equivalente -uitdrukking voor N where x = M : ( x. N ) M
Lijstcomprehensies Quicksort kan neergeschreven worden als
Recursie De reductie van fac 5 geeft aanleiding tot
Accumulatoren De reductie van fac 2 geeft aanleiding tot
(Naive) reverse inverse [a, b, c] geeft: [ ] + + [c] + + [b] + + [a] = c:b:a:[ ]
Reverse reverse [a,b,c] [ ] reverse [b,c] a:[ ] reverse [c] b:a:[ ] reverse [ ] c:b:a:[ ] c:b:a:[ ]
Continuaties
Applicatieve continuatie
Transformatie tussen een imperatief en een functioneel programma function fac(n: integer): integer; var f: integer; begin f := 1; while n > 1 do begin f := f * n; n := n - 1 end; fac := f end;
Stroomdiagramma fac:=f f:=1 n>1 f:=f*n n:=n-1 stop
Verzameling van functies Resultaat: f 1 ( n, f, fac )
Vereenvoudigingen -conversies -conversies