deel i: functionele programmeertalen hoofdstuk 4: functioneel programmeren
Post on 08-Jun-2015
217 Views
Preview:
TRANSCRIPT
Deel I: FunctioneleDeel I: FunctioneleProgrammeertalenProgrammeertalen
Hoofdstuk 4:
Functioneel Programmeren
Functies
xxx kwadraat
De equivalente -uitdrukking:
xxx .kwadraat
Functienotatie:
Voorwaardelijke functies
0,0
0,/
y
yyxyxquotient
De equivalente -uitdrukking
y
vxyxv
yyxyxy
,
) 0 )0()(/)(0(.
if
failififquotient
Patroonherkenning
yxyx
x
/
00
quotient
quotient
De equivalente -uitdrukking
)/( 0 )0(. yxyxy ifquotient
Lijsten
Miranda-notatie: [ ] [1,2,3] e : l hd l tl l
Lijsten
lla lengtelengte
lengte
1:
0] [
De equivalente -uitdrukking
))(1( 0 ]) [(. xxx tllengteiflengte
Lijsten
lla
alla
evensevens
modevensevens
evens
:
02 ,1:
0] [
De equivalente -uitdrukking
)))(())(1(
)02 (( 0 ]) [(.
xx
xxx
tlevenstlevens
modhdififevens
Functies op lijstena ++ b concatenatiehd a eerste element van de lijst atl a staart van de lijst a (lijst
zonder kop)length a lengte van de lijst atake n a lijst met eerste n elementen
van lijst adrop n a lijst zonder de eerste n
elementen van lijst aprefix n a lijst met eerste n elementen
van lijst a
Functies op lijstensuffix n a lijst met laatste n elementen
van lijst atakewhile c a maximaal prefix van lijst a
waarvoor c geldtdropwhile c a lijst na het droppen van kop-
elementen waarvoor c geldtreverse a lijst van elementen van lijst a
in omgekeerde volgordezip a b lijst met koppels uit a en b, in
dezelfde volgorde
Functies op lijstenproduct a b scalair product van de lijsten
a en bposition a x positie van x in lijst amap f a lijst met f toegepast op de
elementen van afilter f a lijst met de elementen van a
waarvoor f a waar is
Generische lijstfuncties
)))(((],,,[
)))(((],,,[
2121
n2121
afxfxfxxxxaf
xfxfxfaxxxaf
nn
n
foldr
foldl
[ ]
foldrconcatlist
foldrproduct
foldlsom
1
0
Functie let-in
0],,[
0)],2/([
0],[
wortels in
4let
2sqrt
2sqrt d
dab
d
cba
cabbd
adb
adb
De equivalente -uitdrukking voorlet x = M in N: (x.N)M met applicatieve evaluatievolgorde
Functie where
cabbd
d
dab
d
cba
adb
adb
4where
0],,[
0)],2/([
0],[
wortels
*2sqrt
*2sqrt
De equivalente -uitdrukking voorN where x = M: (x.N)M
Functie where
cabbd
daz
dzlet
dab
d
cba
zzb
zzb
4where
0],,[in *2
sqrt
0)],2/([
0],[
wortels
2
1
2
1
2
1
De equivalente -uitdrukking voorN where x = M: (x.N)M
Lijstcomprehensies
]02 ];100..0[|[ modnnn
Quicksort kan neergeschreven worden als
]);|[:(
];|[:
] [] [
ablbba
ablbbla
sort
sortsort
sort
Recursie
))1(( 1 )0( nnnn faciffac
De reductie van fac 5 geeft aanleiding tot
1)2)3)45(((
)))12(3(4(5
Accumulatoren))( )1( ( )0( annanan faciffac
De reductie van fac 2 geeft aanleiding tot
221
121
))1210( )10( (121 )00(
)121( )11(
))121( )11(( 1)(2 )01(
)12( )12(
))12( )12( ( (1) )02( 1 2
facif
fac
facif
fac
faciffac
)(
(Naive) reverse
][):(
] [] [
kssk
reversereverse
reverse
inverse [a, b, c] geeft:[ ] + + [c] + + [b] + + [a]
= c:b:a:[ ]
Reverse
):( ):(
] [
aksask
aa
reversereverse
reverse
reverse [a,b,c] [ ]
reverse [b,c] a:[ ]
reverse [c] b:a:[ ]
reverse [ ] c:b:a:[ ]
c:b:a:[ ]
Continuaties)))(.( )1( )(1 ( )0( znczncncn faciffac
))1))(2)(..(.()(11(
)))1))(2)(..(.()(11( (
)1))2)(..((( )01(
))2)(..()(12(
)))2)(..()(12( (
)1).(( )02(
. 2
bazzab
bazzab
azza
azza
azza
zz
zz
fac
fac
if
fac
fac
if
fac
Continuaties)))(.( )1( )(1 ( )0( znczncncn faciffac
212112
)112)(.(
)11))(2)(..((
1))1))(2)(..(.((
)))0))(1))(2)(..(.(.()(10( (
)1))1))(2)(..(.((( )00(
. 2
zz
azza
bazzab
cbazzabc
bazzab
zz
fac
if
fac
Applicatieve continuatie
2121121)12.(
)1)12.(( )00(
))12.)(11(
))1)(2..()(11(
)))1)(2..()(11( (
)1)2.(( )01(
)2.)(12(
))2)(..()(12(
)))2)(..()(12( ( )1).(( )02(
. 2
bb
bb
bb
baab
baab
aa
aa
azza
azzazz
zz
if
fac
fac
fac
if
fac
fac
facif
fac
Transformatie tussen een imperatief en een
functioneel programmafunction fac(n: integer): integer;varf: integer;
beginf := 1;while n > 1 dobeginf := f * n;n := n - 1
end;fac := f
end;
Stroomdiagramma),1,(),,( 21 facnffacfnf
),,(),,(),1(),,( 532 facfnffacfnfniffacfnf
),*,(),,( 43 facnfnffacfnf
),,1(),,( 24 facfnffacfnf
),,(),,( 65 ffnffacfnf
facfacfnf ),,(6
fac:=f
f:=1
n>1
f:=f*n
n:=n-1 stop
Verzameling van functies
facfacfnf
ffnffacfnf
facfnffacfnf
facnfnffacfnf
facfnf
facfnfniffacfnf
facnffacfnf
),,(
),,(),,(
),,1(),,(
),,(),,(
)),,((
)),,()(1(),,(
),1,(),,(
6
65
24
43
5
32
21
Resultaat: f1(n, f, fac)
Vereenvoudigingen
-conversies
ffacnfnfniffacfnf
facnffacfnf
)),,1()(1(),,(
),1,(),,(
22
21
-conversies
fnfnfacniffnfac
nfacnfac
)),1(2)(1(),(2
)1,(2)(
top related