29.05.2014 Views

Exemples du chapitre 4 - PPS

Exemples du chapitre 4 - PPS

Exemples du chapitre 4 - PPS

SHOW MORE
SHOW LESS

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 />

:&¥

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!