Exemples du chapitre 4 - PPS
Exemples du chapitre 4 - PPS
Exemples du chapitre 4 - PPS
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
¨© <br />
§<br />
¨ "! #$&%' <br />
<br />
% ;:1 11111 1<<br />
<br />
¨0¨)(*' +=> ?#$&%' <br />
<br />
¨)(*' +A@B CEDFHG¤IKJMLON9P&QRTS)S)SDVU<br />
§<br />
W/¤' X@ <br />
?YZ5¨)(*' +;: 8 ;CEDFHG¤IKJMLON9P&QRTS)S)SDVU<br />
§<br />
W/¤' 2Y <br />
5&¨)(*' +A@ 8X[ 5¨)(*' +\@ 8 C9DFHG¤IKJMLAL¤]M^KJ_N9P&QR`S)S)S>D¤U<br />
§<br />
W/¤' 2a <br />
¨© 0¨)(*' +@/9' [ )AC9DFHGVIKJMLON9P&QRTSbD¤U<br />
§<br />
W/¤' 2a <br />
¨© ,©$- $©'$c=5 8 $©'$cd5 8 <br />
§<br />
¨ ©'ecdf%)'g/K ?#$&%' <br />
<br />
<strong>Exemples</strong> <strong>du</strong> <strong>chapitre</strong> 4<br />
Caml est un langage impératif<br />
Sommaire<br />
¢¡¤£¦¥<br />
4.1 Caml est un langage fonctionnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41<br />
4.2 Effets de bords . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42<br />
4.2.1 Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42<br />
4.2.2 Séquencement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42<br />
4.2.3 Entrées sorties bufferisées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42<br />
4.3 Données mutables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43<br />
4.3.1 Enregistrements avec champs mutables . . . . . . . . . . . . . . . . . . . . . 43<br />
4.3.2 Références . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44<br />
4.3.3 Polymorphisme et variables modifiables . . . . . . . . . . . . . . . . . . . . 44<br />
4.3.4 Partage ou copie de valeur ? . . . . . . . . . . . . . . . . . . . . . . . . . . . 45<br />
4.4 Tableaux, chaînes de caractères et boucles . . . . . . . . . . . . . . . . . . . . . . . 46<br />
4.4.1 Tableaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46<br />
4.4.2 Chaînes de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47<br />
4.4.3 Boucles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47<br />
4.1 Caml est un langage fonctionnel<br />
¨© ¨)(*' +<br />
§<br />
,©$- % '.0/* '2103$©&' 0© ¨4&© % 56' 78 /9'<br />
¨©<br />
§ ©'$ch5 8 <br />
41
42 EXEMPLES DU CHAPITRE 4. CAML EST UN LANGAGE IMPÉRATIF<br />
¦¡§£ ¨©§¤¤¤§§<br />
¢¡¤£¥<br />
¤©§ ! #"$! ¤<br />
<br />
£¤$')(!¡¤*,+.-<br />
&%<br />
©¦0©§1324-5&%60'7' &8$&©§7©9:¤;¤§©¦' =< >% ' ©?¤©¦' < ¤©§)@&§A <br />
/§<br />
¤§&©§ ! #"$! ¤<br />
&<br />
B¤B¤BB¤B¤B¤B¤BB<br />
¢¡¤£¥ ¦¡§£ ¨©§¤¤¤§§<br />
4.2 Effets de bords<br />
CD6EF<br />
4.2.1 Type<br />
4.2.2 Séquencement<br />
G 1IHIJK§$0=©§9L0©93H H <br />
<br />
G 1M-N0,©7¡¤OI0,©JP ©.O<br />
:<br />
Q 17* ; 1)* ! <br />
**6¡3-R0,©3JI*<br />
G :JS13*S0© :K: <br />
<br />
*$¡3-T0,©;JI*<br />
Q 17* ; 13U V ¤ WYXIZ[§\[6]^\4_`=a9b!ced9b6fg&Z&hjikW,h§Zhlmn`¤og,p¢g¤`6q3Xq<br />
<br />
U§*6¡3-R0,©3JI*<br />
G :$*^JS1?*S0© G :UKJS1U0© :9*k:U &<br />
<br />
*U!¡3-R0,©3JI*<br />
4.2.3 Entrées sorties bufferisées<br />
§$0©99L'¤60©§1sr < < r <br />
< < ¡-5©60=)J<br />
,<br />
§$0=©§9L=©9t G 0©9 V ¤<br />
¡>-u©60=J<br />
<br />
§$0=©§9L&©9 G 0©9vr§' §G §Vr <br />
§G § '<br />
¡>-u©60=J<br />
<br />
§$0©99L0©§7+ <br />
+w¡3-u©60=J<br />
<br />
§9L'¤60©§1sr¤&9wr <br />
¡>-u©60=J<br />
<br />
9G ¦'=%x'¤ <br />
¤y¡-5©60=)J<br />
<br />
§¤¤9L&©9 G 0©9vr¤§&§zr &<br />
¤§&§<br />
¡>-u©60=J<br />
<br />
§9L0©§Q( <br />
¡>-u©60=J<br />
<br />
9G ¦'=%x'¤ <br />
(¢¡3-u©60=J<br />
<br />
'¤¤¤ <br />
< §9L£=% ©¤©9 G JP { '=nO<br />
¡>-<br />
'¤ < § <br />
< §9L£=% ©¤©9 G JP { '=nO<br />
¡>-<br />
'¤$0=© & <br />
¡>-N0©6L£% ©¤©9 G<br />
JP { '=|O
4.3. DONNÉES MUTABLES 43<br />
<br />
¡£¢¥¤§¦¨¢¥¤©¤¨¥¤¨¡£¢¤¥§¡¨¤¤§¨<br />
§"!$#%¢§£¤'&'(*)<br />
§¡¤£¤¨¨<br />
¡£¢¥¤§¦¨¢¥¤©¤¨¥¤¨§¥§¡¨¤+-,.§¨¢<br />
!/#0¢§£¤'&(*)<br />
<br />
12£¢3£4¤§¨5<br />
¢¥<br />
§¡¤+-,.§¨<br />
!/#0¢§£¤'&(*)<br />
¤ 67&$¦¨¢¥¤©¨2¥8¤¨9 <br />
2<br />
¥2¢¥¤<br />
¥2£¢¥¤><br />
6¨2:6;#F<br />
6¨2/1¨?43<br />
§G£¦2§¡¦HB <br />
¡£¢¥¤§¦¨¢¥¤©¤¨¥;1¨?43<br />
!/#0¢§£¤'&(*)<br />
¥©¨¡£¢¥¤G1¨?£43§I<br />
?§2¨¡<br />
!/#0¢§£¤'&(*)<br />
¤ 1¨?43¨JK&=¡£¦ ©8 1¨¥?BC <br />
2<br />
§JL#@3©?4¥2K&7DE£¤§>F<br />
6¨2/1¨?43<br />
<br />
¨¦¨¢¤©¨21¨?43¨JM<br />
!/#@¤¨=&+§¦2§¡¦H<br />
<br />
¨¦¨¢¤©¨21¨?43¨JM<br />
¦¥¤§¡P#%N§¥©¨¡ 1©1§2§"Q<br />
NO?<br />
¥©R1¨?43 §J5<br />
?§2¨¡<br />
!/#0¢§£¤'&(*)<br />
6¥2§¢¥UV?.W¥2 X#ZYB\[]§<br />
S¤¨19QT¦¥¥¤1<br />
X#^[!$#_¢§£¤U&(*)<br />
6¥2§¢¥UV?.W¥2<br />
6¥2§¢¥UV?.W¥2 X#ZY¥M`@?4a#ZYb¨c>)b§<br />
[H`ml<br />
!/#n.¤=&jo<br />
4.3 Données mutables<br />
4.3.1 Enregistrements avec champs mutables<br />
¤¥¡¤¥¡K&:q:h#n.¤5_W¢¥¤¥E2 E5#n.¤UrB§<br />
¤§p¦¥<br />
tEf#u.¤5%r<br />
¤§p¦¥$¤¥¡¤¥¡=&sqt8#u.¤MvW¢¥¤E32<br />
2 ¤<br />
67&sq&§w>%EC&§[r>¨<br />
6¨2:6;#v¤¥¡¤¥¡K&sq¥7&sw]%EK&e[r<br />
6h<br />
!/#_¤¥¡¤¥¡K&sq/&jw]%E=&j[r<br />
6hQxERDb!uy§y>§<br />
!/#0¢§£¤'&(*)<br />
6h<br />
y¥r<br />
!/#_¤¥¡¤¥¡K&sq/&jw]%E=&sÿ<br />
6hQTDb!uy§y>§<br />
4¨?¤¨K{B!£o#<br />
z<br />
6hQTDb!uy§y>§<br />
|¨|¨|¨||¨|¨|¨|¨|<br />
E¥2tK s¡¤/W¢¤E2 <br />
}4¥=?§¡U1¥2'2
¦¨§¨©¢¥<br />
¡£¢¥¤<br />
¦¡¦¤©¢¥§ !"¤"¢£"¤$#§%'&<br />
<br />
aI§¨©¢¥b0<br />
¡£¢¥¤<br />
¦¡cad¤©¢¥§ !"¤"¢£"¤$#§b"&<br />
<br />
eI§ca^¥ ¡£¢¥¤<br />
¦¡ced¤©¢¥§ !"¤"¢£"¤$#§b"&<br />
<br />
aI§¨©¢¥b0<br />
¡£¢¥¤<br />
¦¡cad¤©¢¥§ !"¤"¢£"¤$#§b"&<br />
<br />
eI§¨©¢¥b0<br />
¡£¢¥¤<br />
¦¡ced¤©¢¥§ !"¤"¢£"¤$#§b"&<br />
<br />
I§¨©¢¥=5lk7;<br />
¡£¢¥¤<br />
¦¡cWm5¤6-nc¤o-n¤U7?©¢¥§; !"¤¢£"¤$#§+
¦¨§©¦¢¥<br />
¡£¢¥¤<br />
¡¦ ¡¤¦¢¥§!#"$%&¤'¢£%(¤)§*+&,<br />
<br />
¦-§.+/'<br />
21%3¤4§6587<br />
0<br />
^J§! e" W X §+En" W Y §+©,6<br />
¡£¢¥¤<br />
¡^A[53 ;j `?bU7H¤¨§! T" W X §oH" W Y §pq(,<br />
<br />
b¨§ ¥<br />
¡£¢¥¤<br />
¡ 0'M Gb 0M §©O(>1¥% M<br />
<br />
ä § X rts!u(v&w(xzy{Z|#}4s8~<br />
¡£¢¥¤<br />
¡a 0M ?%'¤¨§¨O'1¥% M<br />
<br />
a©^©§! X ^ rts€'‚(wPyhƒ…„†¥w£‡s?~<br />
¡£¢¥¤<br />
¡a 0'M ?%'¤¨§©O'>1¥% M<br />
<br />
¦¢(" "$%…" ¤4¡ X ¡ Y §g< ¤)" W ¡ X d)¤ W<br />
¡£¢¥¤<br />
9'˜¥%…¡ 0'M ¡ Y <br />
9'˜)"$%zˆ5 pj ¡ XX 7 0'M 9(˜)"$%zp5 j 5¥"$%…" ¤6¡ X¥X ¡ Y 7'7<br />
<br />
¡"$%z" ¤I ¡'>¤'¢&£)>^'¢ 0M ¡'>¤'¢&£)^'¢ 0M ¡'>¤'¢&£)>^'¢§¨O'>1¥% M<br />
<br />
¦¢(" "$>%z" ¤&("$ = _¡ X ¡ Y § < ¤)" W ¡ X d)¤ W<br />
¡£¢¥¤<br />
9œ%…¡ 0M ¡ Y<br />
<br />
4.3. DONNÉES MUTABLES 45<br />
9)¤;:-< >=<br />
?13""A@B¦C¥<br />
D?%'¤6¡¤4§EGF£<br />
0<br />
¦¢(" 587H§©¦I§J9)¤K:-< >= ?13""@G¦C¥<br />
¡£¢¥¤<br />
¡AL1%3¤ 0'M 1%3¤N§¨O(1¥% M<br />
<br />
A5?7P<br />
21%3¤4§6587<br />
0<br />
@G¦C¥<br />
D?%'¤6¡¤4§EGF£<br />
0<br />
A5?7P<br />
21%3¤4§6587<br />
0<br />
@G¦C¥<br />
D?%'¤6¡¤4§E-Q<br />
0<br />
¡>1(¤TS£U<br />
¦RB§E>S£¤($>¤($#SPHS(<br />
¦ ">¤'¢¦)NQ 0X>Y <br />
V£W<br />
¡>1(¤US8U<br />
¦RB§.ZS'¤($>¤($US3[S)<br />
\'\\\\\<br />
W N¢^ = ¦'¢&$% W ©¤_ = ¢.£¤¦)`%(aJb1'¤¥ W ¢£¦¢13>¢¥ced)¤ W ¤_ = ¢E?%'¤<br />
]<br />
¦ Y §©¦¢¥f+<br />
¡£¢¥¤<br />
¡g¦ Y ! ¡¤¦¢¥N§! T"$%(¤'¢£%&¤)§.+),<br />
<br />
>= ?13""A@h¦ Y £<br />
9)¤;:-<<br />
D?%'¤6¡¤§.<br />
0<br />
S£U ¦;§ES<br />
¦ ">¤'¢¦)eF 0i <br />
V£W<br />
S8U ¦;-§.ZS<br />
\\\<br />
] W N¢^ = ¦'¢&$% W ©¤_ = ¢.£¤¦)`%(aJb1'¤¥ W ¢£¦¢13>¢¥ced)¤ W ¤_ = ¢E?%'¤<br />
= ¢ 5( Cj -b#7k¤¨§ " W X ' ¡¤Rl¤'¢(¥)>^'¢<br />
¤_<br />
= ¢ ¡(>¤'¢(z bz¡¢.§g9œ%…¡Iš9'œ3"$%z$ ¨› ¡'£¤'¢(`& b3¡¢.¦¢¥<br />
¤_
"!¤#%$&¥§©¨¥%'%(*)¥§,+-/.01%2354¤4<br />
¢¡¤£¦¥¤§©¨¡£¦¥§©¨<br />
'7¥§©¨¥8'¤(*)¥§©+*-:9<br />
6<br />
8#%( 0>*[5CB¥§©¨P¥8'(*)©J*'!#O0>3F0>¦2b44<br />
I<br />
'50>*[X9R=0¨(D=¤,(#)>§8?¦=,$¦='8@%#aC<br />
6<br />
I<br />
8#%( (*',u#5v7N8'%'_N34%4<br />
I<br />
's(2&9w,(¤!=©¨x7'!¤!'-'(¥©J<br />
L¡¤£¨=B¤%2<br />
¤8#%( !¤#¥ 8#(*)¤'*,(7CF$%G¨¥,(=§,¨<br />
L)<br />
L¡¤£¨=<br />
M$'*=8K¦=,(%JON¥§©¨P¥8'(*)J*'!#Q9R¥,'7=0>+¦§¤¤=@¦#S..8N<br />
.TC*¡¤£¤¨=F(8J#,¨ 9WC3%21#¤,# %#(*)¤%',(X.T<br />
L¡¤£¦¥§©¨PHT)UV=$<br />
=V¨<br />
8#¤(*)¤%'*8(¤74<br />
44 <br />
'7¥§©¨¥8'¤(*)J*'¤!#:9<br />
6<br />
'§%?=8$='%@¦¤#A¤ ; 'B=¤,(#*)>§8?=8$¦=8'%@%#A ; '§%?=8$='8@¤#DCFE$,G%Ḧ<br />
;<br />
8#%( 0>3C1¡¤£¦¥¤§©¨TYZ!¤#%$&0¡¤£¥§©¨2Z!¤#%$¦21CF¡¤£¦¥§©¨P\[ Z!¤#%$&0¡¤£¦¥§©¨P\] ^!¤#%$5¡£¨=%_¤¤54¤4<br />
',¨?<br />
'50>3`9R=0¨(D=¤,(#)>§8?¦=,$¦='8@%#aC<br />
6<br />
Lc3¥¤§©¨(#8¨(C*¡¤£¤¨=¦f8f<br />
¡¤£¦¥§,¨bVULcd¥§©¨(#8¨(*C¦¡¤£¦¥§©¨Pae2<br />
'50>¦2g9R=0¨(D=¤,(#)>§8?¦=,$¦='8@%#aC<br />
6<br />
¡¤£¦¥§,¨bh[iLcd¥§©¨(#8¨(*C¦¡¤£¦¥§©¨Paj]kLc3¥¤§©¨(#8¨(C*¡¤£¤¨=¦f8f<br />
¡¤£¦¥§,¨bVULcd¥§©¨(#8¨(*C¦¡¤£¦¥§©¨Pae2 Lc3¥¤§©¨(#8¨(C*¡¤£¥§©¨Ol¤ll%f%f*<br />
0>3D44<br />
m9^=0¨(=¤,(#)©>§8?=,$=8'%@#DC<br />
Lcd¥§©¨(#%¨(*C*¡£¦¥§©¨Oll¤l%ff<br />
¡¤£¦¥¤§©¨aVUnc3¥§©¨*(#8¨(C*¡¤£¦¥§©¨Pbe2<br />
4.4 Tableaux, chaînes de caractères et boucles<br />
4.4.1 Tableaux<br />
(zl%34¤4<br />
m9^=0¨(
¦¨§©¤¥¢ !#"$&%')('* +,.--$-/*0*<br />
¡£¢¥¤<br />
§2¡3¦§©¤2£¢546872¤9§2§©:;§©§©:?@A*!B"$&%')(?*+B-$-$>-/*C<br />
1<br />
¤2£§£7D¡¥¢E,.AF@AG!#"$&%H !-0 I?©<br />
¡£¢¥¤<br />
§2¡!¤£§£7,D,¡¥¢J4K872¤;§©2§:9§2§©:9=,AF$&AL,*"$&%A*+B-/M<br />
1<br />
¦¨§©¤¥¢\+]§©:/N^¦,§`_¢$@A*+*2A>22A[%?FC+B-/*C<br />
a¥b£bä @a©b¥b$ä Ka¥b¥b$ä 6a©b¥ba $L a©b¥b$ä Ka©b£bä Ka¥b¥b$ä Ka¥b¥bAa ?<br />
<br />
@a©b¥b$ä Ka¥b¥b$ä 6a©b¥bap$Lma©b¥b$ä Ka©b£bä Ka¥b¥b$ä Ka¥b¥bapH/<br />
oab£bä<br />
vWV¤5wQar¥<br />
¦§©¤¨£¢qN£Po2RrN£PY(¥R9SsT!a¥t¢£ü<br />
T!4#V©7¨W¤XPYR<br />
¦§©¤¨£¢M¥<br />
¤Q7,DX§©2§©:9§©§©:L<br />
T!46ǹ<br />
@at2¢£ü vWV,¤jwYacKa©b¥b$ä @ab£bAapH$+2ma2b¥b?ä @at2¢£ü vWV,¤jwYacKa©b¥b$ä 6a¥b£barI?<br />
2©ma£b£bAä<br />
@at2¢£ü vWV,¤jwYacKa©b¥b$ä @ab£bAapH$+2ma2b¥b?ä @at2¢£ü vWV,¤jwYacKa©b¥b$ä 6a¥b£bAapH/<br />
oa¥b£bAä<br />
]2§:/N8¡¥¢¥7D¤¥x9¤A¥<br />
T!4@872¤
48 EXEMPLES DU CHAPITRE 4. CAML EST UN LANGAGE IMPÉRATIF<br />
¢¡¤£¦¥§£¤¨©§¦¥¢¢<br />
¦<br />
<br />
¡ !"!#%$¤¥§¤¦¦¦&(')¡£*©!+¢$,-'§©/.!0§©%1¡%¥¦20 %354(©¢¡6©!+¢$879£*¥¦%:<br />
<br />
:&¥