Notes du
Cours d’informatique Math. Sup. MPSI Lyc´ ee Fermat A. Soyeur
Table des mati` eres 1 Introduction ` a CAML " #%$ &$ (')$ * +" ,$ -./0 /)1 +"+" 2345 68 7 ) +" : ;< =>=? 5( @ +" ! BDCEF )Xh
j PFo Q./bNO / R)$ Q.5Up "R : dOXPRQX 5Q/ QR''q "R ! stK5 u "R 9 dO=LEX'$ =? 54 ?P. 'K5 &P/(XMPFo+(QR5)=?b2XIj/;=? =V(6&$ =V4 QX /|
L0FP/h/ wUQ/ let ... in ... (( Q. Xs M'S(
/D8o &Q.XjEF $ Q/P/(Xa;; >^ L’identificateur a n’est pas d´ efini.
}EFQ.jP ^ L’identificateur a n’est pas d´ efini.
*
%Q.' P.Q.y
let in
Q/) )NOt| CAML
#let a = 2 in let b = 2 * a in a + b;; - : int = 6
1.2.2
Parenth` eses.
6
; =>=?P/(X&'SkEX'QREt(MP.)M'S(.T(TU) ' M EM$ 45Q.5DEF )7 P. =? PR-/w' o 5PR5?P8o $ ('QX4 P.)yE. X a =??5?Et4 68)7 ) }UQno '&Ne(Q. $ ('Q/> E/ 8$ | CAML
#(2 + 3) * 5;; - : int = 25
de'a JP.=% ^ =?MEF Q.M
Q. )&')& XK QX /54 wP/M'Sj5(''MPRQ>/ =vf/5QR ' 'SkX h4 4E/4 7 D')< EM$ ( Q.5DQ/Q/ '&QRJ' ( 8| .
)
)
*
CAML
#4. *. 5.;; - : float = 20.0 #2.E4 /. 2.4;; - : float = 8333.33333333
sFvNO X
print_float
EF5=?JPFo+?56/ 63 ? 67 C 68 D 69 E 70 F 71 G 75 K 76 L 77 M 78 N 79 O 83 S 84 T 85 U 86 V 87 W 91 [ 92 \ 93 ] 94 ^ 95 _ 99 c 100 d 101 e 102 f 103 g 107 k 108 l 109 m 110 n 111 o 115 s 116 t 117 u 118 v 119 w 123 { 124 | 125 } 126 ~ EF5=? 5MP.bEt JPRQ 44)7 v 7 }) P/Ij.;&dKd int_of_char char_of_int CAML
#char_of_int 65;; - : char = ‘A‘ #int_of_char ‘T‘;; - : int = 84
sFvNO X
print_char
EF5=?JPFo+?56/MQ. )4h)7 5
string &X 56t^ / P.)(h)7 5b JP unit =
1.3
Aspects imp´ eratifs du langage
' "# ,.- '&% ,.
s KC'P.E/5 T(=>=V4 F
jE/5 56/vPRQ NO / .X=? MP8o Q/ hPRt4 QRt|t EM)$ -/P/h/J' o hP Q//J$ =? 'SE/5 T(=>=V4 >=LEM$ 4 (( ))
$" ' " -6
0
1.3.1
R´ ef´ erences.
*
/ 0 then print_string "positif" else print_string "n´ egatif";;
:RD' )|
QR& UQ/ DE/'ShXM $ 5
begin
end
&) X P=?MQ//MQ/.Q/MXK QX LEt4 0 then begin print_string "x > 0"; print_newline() end else
!.i Q/ ' JG
*
begin print_string "x int Q/nPXM'jEX'Q/=V4 L=LEM$ 4 U 'F J=LE (t( VPRQ}E. Th=>=?
sF('PRb $ PRQ}E. Th=>=?F|R'Ne(&f/ })UQX ' o 4 XP%P.'Q.
1.4.1
Ind´ ecidabilit´ e de la terminaison
de'3 $ j $ =? R$ hQ%P=?P. .&k $ k55=>XEF Q.b5 QX 45TQ/=?5j Q Eth)Fs3o P< $ P.'S>P< $ =? XK4 'V Q/hh .(/&5&PX(/&')MPX EF Q.(k(' h XK Q/5%V 7 Et4 vP/> NO / U'SkNO X }Q.( a| termine let absurde () = while (termine code(absurde)) do done;;
*
X'SJNO / & =>X (' h hhQR D'SjNO X f Q/ 'M5(Xa-. absurde code(absurde) true absurde UE4\ 5D'S/cEth (h' 5 (QR =Vh3(' hF'S/ P.bNe Y$ P. absurde
6
,b(X&')MP. QRy4h R 14fF QR v 7 Q.X(fXQRPR$
1.4.2
Invariants de boucles
8,0 $ '
, ,
{ $ 5(JP. .&& 3 $ Q.f/' bP8o XK QX / %(E.EF'' PRQf/' ' Qg $ Q.54n;< /P=?>=LEM$ 4NO w' wfF Q/') lQR ' VQ/ for while 4 S(&P.bfF QX' E QR&E. Q/U&) KCUEFP/jE/5 T(=>=? Uo )Kv 7 PRjQ//jE. hE/ $ $ wD$ -X( (( ))
*
F 7Q xP=?J }Q.' (' o 45S(P.LfF QX'wEF Q.k=? 'V55=>t(
P8o Q/ E. T(=>=?w Q EF Q.V$ QXPR&'Sv) =LEX'y0j $ P8o Q/VE/5 T(=>=? & 1 4 5 S ( & / P F f
/ Q ' ) K J Q/1yR '' J =>=? 5(bQ/FEF5=?JP.v =LE/5 /PR5b =>=? M' E/5 T(=>=? NO X .X
*
' 6 , ,
*
, , - ' % -&/
, , 4 " '65%0 (7 *
'
R nQ/kEF 'Cn ^ =? !" $# $# E/R)$ 8$ Et(n'c 5Q.3P/D a ? % ' &)( } JQ/'SkNO / } Q/hh w ('T h50 6.=?JP/ h
5/=V4 w=LEM$ 4 U FV 7Q 'jE. T(=>=? QRc.$ $ 56/ float -> int = #let g = f "100";; g : float -> int = #g 3.;; - : int = 103
Chapitre 2
R´ ecursivit´ e 2.1
Fonctions r´ ecursives
M/&NO / 3EFQ.&^ 5M(=? &)$ b 7 )o (E.EF'c '' =% ^ =?\EF Q.$ ('QX\Q.?4('Q.' 234jyR=LE/' 'SkNO X VNeh
''MEF U 7 P/J'SkE. hE.5$ & $ =V4 6& $ =V4Q/b Q/(5a|
91 a {\'' P 1 | _ -> n * fact (n - 1);;
6
J h ?'S} h E /PX(/)v5L'SVE. hE/ $ k $ =V46&$ =V4 UQXv'SVNO / M3;bo ?Q/cNe(v' o $ 4^ P. 'SvE. Th=>=V4 LNO / //''de'FNe(Q.JQR ' M'=? h ' $ EF Q.jP collatz (n / 2) -> collatz (3 * n + 1);;
s8> )Q.5P/;< ''S4 kPRbQ/k) NO / 1 =>X E QRJ5 Q. ('Q. P/ $ J $ E/5 Q.ck $ )
X=V(J R)$ Q/'54M8o+
(=Vh
M?R $ Q.'5(D'Sh Q/&P.j)('Q/'S4f/'D $ / QXDP.0/ absurde =>XJEh
termine
(QR
"absurde"
true
8vP. XL'S?NO /
absurde
/?
&'SNO X X?? =>/wEh a(' h (Q/PR( wPX(/ V4h 8'S absurde termine "absurde" false NO X b =>/ absurde
6
,b(X&')MP. QRy4h R hf. &Q./ hPR n {\1 X'Q/ Uo j(Q}E. T(=>=? QRiQno /) =fFj'SE/5 Q. P/b 5=>X(
VP/ kNO X M/k= $ 6X P.'Sh Q/=LE/' EF QRb=? jQno Q//NO / %R $ QR U =>/ . /K5LL 7 y6.fFjQ// QRc' o / =f/' ,?5 "! " - % -2 ,0 %9' 2 ' '6 7 @BA DCF E Caract´ erisation des ordres bien fond´ es
Exemple
1. ,
%('
.-0/`
2143
s3o hPG =>.=V('
>f/ NO XP$ ' $ =?5c=>.=V(Q.y>E QRJ J hP CAML
Ce sont tous les couples de la forme $(0, p)$ o` u $p \in \nn$.
@BA DCF E $ Induction sur un ensemble bien fond´ e w jJQ.
/ =f/' fX NO X< P $ / Q. E.R $ P.44J Q.BL p =>.=V(QRy?P/B> /F' o .)$ QR | ' Q./ 4E.EX'44 L F 7Q Q. L % / / :' ( t& J=>/=V('XPX(/ 'b 1
*
*
6
(' h
*
p t& Jh
'
% *!*"*
pf
j F7Q
)K&Q.% hP&fX >NO XP-./jP. 4('Q/'wP. n *!*!* n %F t "*!*!* F t&
pf
pf
>
X
f
=? 5v =wQ.'5(&$ =? ) h 5) 1PFo Q./kNO X 1R $ QR U Q.'5(j) b6& $ 4 7 =? )
{\%R4$ ('$ '8 ME/'QXM =LE/' P.bNe( P8o (f 5P'b(
//=? D/P.Q/ Na)(J' oK)$ 50 QRJP.'SkNO X VR $ QR j P< $ ) Q/'bPR 5=? )s h
// =?cKCE/Q/)KJ' Q/hht|
/=VhQRy (( ))
'cfX X'Q/&P/h/5Q/S('4n Q/ $ ' $ =?k4 f/ (5F{3 QRE/E U hQX>' o h56X?)h' Q.' n .EF Q.k
Q/ '
$ ' $ =?
. a) =>=? vgP< $ P.Q.5'V4('Q.' 1 | _ - > x * exp x (n - 1);;
'
s8kNO / %PFo IJ =Vh.)KjX$ ' 7 f.J%RNO =V(Q/MEF QRJ h/ by 4 ^ =?=?i(E/P.n| CAML
let rec ackermann n p = match (n, p) with | 0, p -> p + 1 | n, 0 -> ackermann (n - 1) 1 | n, p -> ackermann (n-1) (ackermann n (p - 1));;
} M'Sk 5=>X(
VP/ NO / 8 f } 5MQX3 /h5=V(.t t n
'
*
sF5E.R $ 5wQ. $ ' $ =?wP8o Q/ / =f/'VXPRQXNJE4>Q. " ' '6 D P< $ 5(w5 E/5 P.Q/ 7 ' o hP/P/ ) XK QX QR * }E/'Sh) (Q.y?NOQ/'')$ '$ =? iP. Rb(QRy/ QXP. ')M XK QX5QRiQR' $ ) ,b(X&' o yR =LE/'jP/ M 6 ' o M:L hf/ QEt(J(E.E/')( ?Q/) bP.Q}) XK QX QR Succ bE/R)$ / M b'bfF R $ Q.'5(DEF Q.M
Q. 'K5
; o j )$ 5hh=? >)$ 55b' iNO X /& Q.J' 0 | x :: q -> 1 + longueur q;;
M/ NO X }Q/8 /)() 7 /jP/Q.yV' )t| CAML
#let rec concatene l1 l2 = match l1 with | [] -> l2 | x :: q -> x :: concatene q l2;; concatene : ’a list -> ’a list -> ’a list =
;/5 0MPFo Q.Xj' | CAML
let rec insere_fin a l = match l with | [] -> [a] | x :: q -> x :: (insere_fin a q);; let rec miroir l = match l with | [] -> [] | x :: q -> insere_fin x (miroir q);;
8, %&%('
P< $ T/&'b/ =vf/5MP8o $ '$ =? \P.j'S' D P. O R&& 3D)K&'jX =f.MPFo+4E.EF 'cR $ Q.5NOcP.j'S NO /
1v'S'S4 P/j.)$ QR /)8| insere fin a l
M ` & a
P8o F} 7Q ' o & 3 i ' o X h v 3'\/ =vf/5\P8o (E.EF'XR $ QR NOXEF Q.n)(' Q.'
1k'Sk5 '( }P. R $ QR 5 / 8|
v `U
v 3
` &
)
miroir l
eQ./c=? QR\P.c'S 7 'SE/5 => 7 M'K5 )KMP. =V(DEh&'SvP/Q.y 7 =?
(QXQ.XbP/ MP/QRy' )ino )KMP.
sFQ/ ' 5P. 'SNO / % h E /PX( J)Kn| CAML
let f l1 l2 = match (l1, l2) with | [], [] -> ... | [], _ -> ... | _, [] -> | x1 :: q1, x2 :: q2 -> ... ;; J Q/& 5 /&P.)MyR=LEX' &
2.5
Bj,k
Impl´ ementation de listes dans d’autres langages
,0 &%(' -
,b(X&')&'S(.T(TU)iP/jE/5 T(=>=V4 L hPR .X'J ;Y Q 23h )h' Q./ 'K5 o =LE/'$ =? kv 7 ' o hP/bP/ MEF 5Q.3)K3Q.X=?D')nR$ N)$ X )F c EFQRcP 7 5J)''Q.'R{3 R'jE/5 T(=>=?Q.ino kEth 7 )o QREFJP/b'SvTU)K }P/ 2 fibo 3 fibo --> 5 fibo --> 8 - : int = 8
; 5JNO / V t)QXJEX'Q/ QRD4E/E '3R $ Q.5NO\QR ')3EF QR&)(' Q.' < RsF-.TQ.5b" !kR $ Q.=?M
Q/cNO h5=? fibo 3 P8o (f/5b' MPRJ$ 5) =>=? $ ('Q&)$ LQ.X?NO / R $ QR nsF NO X Q.(5 4('Q/' 4| CAML
let rec fact n = match n with
| 0 -> 1 | n -> n * fact (n - 1);;
I56XhQ/>4E/EF'DP/wNO / FQ. X Q/U'c =LE/'Sh)=?= $ =? 5w R)$ LUQ/i) 'SV('QRwP. 4 TUQ.=? >Q. /PR5 kEF QRwE/'Sh)w'1('QR>P.V
QR>P.V' NO X 8\M' o P. =V(/P/?PFoK $ hh'QX aQ// ''Q.' fact 3 w.)$ 8=VhkEF QR5 =LE/'v'S%('Q.wP.?5
QR 8' .X ^ 05L'S}('Q.LP/>5 QRLP. \& (3, _) fact 2 X Q/U' 7 Q/ =?)5(TvP. Kh (U jgde'cyK5vQ//'Sh P.NO / XJR $ QR MQ.3EFQ/U )o $ ('Q/)U
2 "-6- ,0 0
)
3
?
*
0
1
1
?
1
?
1
1
2
?
2
?
2
?
2
?
2
2
3
?
3
?
3
?
3
?
3
?
"+9
;
"$ % :
3
6
Q/ Eth)b= $ =? J / 5(|R')DNO / XD.)$ QR c 5=>X(')
*
Fonctions r´ ecursives terminales
' , "#
PRvQ8o Q./NO /
R $ Q.5U c'> Q.'t('8| CAML
let rec terminale n = match n with | 0 -> print_newline() | _ -> print_int n; terminale (n - 1);;
h' 5&Q/)'' / ' o print_newline(); | _ -> non_terminale (n - 1); print_int n;;
sF NO / Xj.)$ QR j =>Xh') $ h b)4w'' /L& $ ) 5 Qno Q/ Eth)= $ =? v) / 5h ' 5P.'Q.yD $ Q. O'S>6t(QR5Q.P/v'SLEX'wPFo yi)$ Q. 1X5 4^ bEh ) '>5(''P/v'SVP. /&)$ ) / t F EF QR
QRfX' 'Sv('QRJP/ J45TQ/=? i' h&P. ' o 4E/EF'tR $ QR NK (( )) de'jy }Q// (/ NO h5=V4 g(QR5 =V4 UQXVQ.JE =?LP/5 =LE/'Sh Q//NO X R $ QR U> 5=>X('?Et4>Q. E/5 T(=>=? =LEM$ 4 NnQR '5(MQ.XfF Q/ 'bQ//.$ N)$ X .QRE.EF U /MQ/v'v56&$ =VPFo Q.X NO / 1R)$ Q.5U 55=>X(' 7 Q.145TQ/=? X&
MP.'SNO =?Q.( a|
let rec f x = match cas_de_base x with | true -> f_base x; | false -> action x; f (sigma x);;
.
7Q F P< $ TU/jQ.}E.R $ P.)4i) h 5)KEF /P/hbk 7 ' o X =vfX'bP.)M)ht(QRy Q// 5hXJNO / cas_de_base f_base Q// $ 5jPFo MP/JfF 5P/iP 7 SEF Q.Q/ hPkfX NO /PX(' ) 2\'QX8T3$ &$ ('=? 'y cQ//c6& $ h53P.c'S VQ.EF5=?nP/\ (XKNO =?FQ./\NO / kR)$ Q.5U QX' /Q/&VQ./ (
2 ' %9' -
"$ ,
2.6.2
Accumulateurs
s >NO / Neh
'' )$ 505v
QXj'SwNO =?vQ/Q/''no )K EthjR $ QR U 55=>X(' X'aNe(Q.) .t^ ' o $ ('QX4 8 P/ )(JP.bEF Q. t('1 $ Q.('5/2a QR )'S X Q.'Q/ /o L> 7 PR Q/ 45TQ.=? 4('Q.' fact_t n 1 P / .Q// / Q.U ''jNO X } $ hh'Q& $ SEXQ. UQno '' P x | n -> fact_t (x * n) (n - 1) in fact_t 1 ;; fact : int -> int =
s8kNO / } $ hh'Q& $ jQ.Xb Q/'bNO &M5 U bQ.XJNO / 8 fact_t ed ' >E Uf/'}PFo+(=g$ ' h'
) =LE/'yV $ P/'S NO X eQ. )(' Q.'S(' o =VhTU=>0 >PFo Q.X' )L miroir Q.' (bQ./kNO X (QRy'S(5 Q/nE/5 /P P.Q.y ' )JEF Q.( TUQ.=?5 .Q./v' & !*!*"* . miroir aux miroir_aux (x :: accu) q in miroir_aux [];;
0
2a QR$ ('Q/8'S& =LEX'y3 $ P.i cNO X X h5 / v '\X =f.\PFo+4E.EF't.)$ QR0NOt& $ ) h0 /EF Q.a4('Q.' ' 5 Q/ ( ( ( ( a hf/&'S'S4 }P/j.)$ QR /) miroir aux l accu
1
*
,
v `
`
v
v
)
&
Q//P. .Xi=>= )$ PRS45=?v v ` a D234D) X)$ Q/ &)$ 05
4E.EF'nR $ QR NO miroir l h' 5&Q/ 'SkE.=> 7 M %Q/ / Q/M) /?)$ 505j& $ ) (iP. ' o 5PR5 P. 4. E EF'iR $ QR NO)
'
{c50 Q.XJNO /
bits
UQ/U j'S' P.)M56./ & fh "wP8o Q/} V|
1
*"
!"
1
*"
1
& 1 ! *!*"*
1.
Chapitre 3
Analyse math´ ematique des algorithmes 3.1
Complexit´ e
s\o (t('CP.) =LE/'yj $ P8o Q/%('T h50 6.=?J) X L 7 $ ('Q/F|
'6 $ =? M& $ )5(O'S =LEX'y $ - "$ "$
J 5=LEtMPFo yD $ QR e' =LE/'y$ "JsFvE/'Sh)j=
;4h %(J8'S XK( jP.' o hPbP/>)` /'8wP.
.Q/)8o MEth '4h P. /TQ/J hPR .X''=?c')M'Sh )iP/ =LEX'yJ $ Q.(5 |
*
+ " ' 5&% +3 , "8 '6 5% "- 3 , "8 '6 $38 , "$
=LE/'y$ |/ O' T 3S4 7 &?) ) =LE/'y$ |. a e ?)h)) =LE/'y$ |. w k'a&=VhiEh& w 3e ?)h)) =LE/'y$ |F w we=? (CU ./ =??)h)L' hQ/ .N)$ 5Q.L 7 : / ?)h)w/ X s)j('TU 6/=? D=V4 5'Sfh$ T3 $ &$ h'nQRkQ.X 4$ TU P. EF QR. $ T/ 3;a' $ '$ =?5 4E/4)7 L
$#
$#
$#
#
4 " 6' 5%0 $7kGR(
XJQ.Xk=V(5Q/vQR 'vEF QR' 4('Q.' ` . (' h
CAML
let recherche_dicho x t = let rec cherche_entre g d = if d < g then false else let m = (g + d) / 2 in if x = t.(m) then true else if x < t.(m) then cherche_entre g (m - 1) else
6
Q.\U Q.F Y
P. QRy )U
:.
#
' - , 7 - '6 ' - ,0-- ,0 2 " "
cherche_entre (m + 1) d in cherche_entre 0 (vect_length t - 1);;
@BA DCF E
$
Complexit´ e de la recherche dichotomique s L/ =vf/5wP.L) =LEt((
XM' h P8o Q// 56/556XvP.56X h5 =>Q/k)Kk=V hR $ E4v"' T =LE/'yb $ P. 'S 56X56/JP.56/ h5 =>Q/b MP/ Xb 1 wO' T aMPX(/k 7 'Sv-. P.Q}54fX'4(Q bP/ X Qno (Q% /P?Eth hTU EFQRM b) &P/JE45) Q. D'j54fX'4(QVP/j' o XPR `V 7 : j(/P. Q/ IM/ E/5 T(=>= J $ %
CAML
let tri_bulle t = let echange i j = let temp = t.(i) in t.(i) 4
*!*"* *!*"*
4
))
P Q.'=? 8o vEhQ./U5 P/ eas>X =f.LPFo / P. D P/ /w'>X =f.P/? QRE/')L k)U PRK /5t|8'DC l i ) "R ?E QRi$ Et43' o / =f/'&P. \E =wQR4 /3VP/Q.yw'Sh \PR 5 ?' |')3EF5=Q.54 / )U) 4 a J' J(Q. >/s\o 4E/E/')4 JQ.XjfX }P.B ' U >
*
:R+"
' ,.- ' 8, 7 ,.- & ' '
@BA DCF E
d& [w
#
$#
" - "! " 2
"$ ' - ,0-
b'QRi=VhTU i=>5 P/(X R PX&'bX =f.M=? (CU }P8o
{\}T5 QRE(D' iEF5=Q.54 /iP.B' Xt| d& [
d& [w
d& [w
"
(' (
D
"
)
"
D !
4
Analyse du tri bulle
,b(XD5 QX&')M)h ' / =f.jP/ =LE4( /cP.Q Ff/Q.''bhhQR8|
a
3
3
i
sF/ =f.jP/b (/ NO &PRQ} fXQ.''j(Q.8|
3 Y `wP/h/&' =?'' QR&)he' 4f/'4(Q)KM 4$ : D &PX(/? a 7 56XUQXkEh (TkP/h/ 'SLfF QX' P c$ 5-/ x`
EFQ. Q.' Q// . for k 'b54fX'4(Q *0 ) * * * * 4i }E/'S)h& * `U "*!*!* # M' Ne(QR (Q.5(%P.
=LEt4( /LQ/ P8o $ '$ =? cEt45=> !*"*!* Q.8
MK =? &QREM$ 5Q.5J 7 E/'QXiQ// =LEt4( ? Q.E.EX'$ =?(5 )U # 'E.=> $ '$ =? O' hQXV' o l8o QR'?EthLP/} /'' a'M8o Cl1Eth5 Q QRw % =LEt4(
QRE/E/' $ =?5h0)U{3%/ 5( 'bX =f.jP8o /P. M
}
R % f. MhQ5 h('
w
$#
)
)
,#
# E.R $ 5n'D/ =f.3P.i Q.E/' c Ra %h , 5
'nQ/ 4o )KMM 7 PR\'\/ =vf/5\P8o X P J'SjEF5=Q.54 ?h
)$ / 7 234J (XKNOk # {\/Q. tv 7 56XhQXb) =LEt((
> Q& $ VNeh0&Q. (XKNO 7 'S-.%Q/V(XKNO& Q.E.EX'$ =?(5 234j) X)$ Q/ U' / =vf/5bP.b (XKNO5iD$ -/3|
&
$#
"
Y "R
&
)
w
)
w
sF/ =f. P.b (/ NO &P. 37 5bPRQ%/ =vf/5bP. =LEt4(
/DPFo Q.Neh5QRJ'&)$ (
[
[
G
[
G
[
G
[
G
[
G
[
G
f
fF)
4fF
fh
44f
hf
fh
4fF
3.3.4
G
:. :
, " ' '6 2 -6 ,. %(' ' % : ,0
Comparaison des tris
s k4f/')hQ1 Q/( P. //'X =f.P. =LE4( /
D $ ') cQ/'' de/
a
B8(XKNO5 =? (C =V4y
=>
a ` a
a
a
4f/'$ X
Q.
Q.
;P.>('' ' o+('TU 6/=?j) =>=?X jEt4j) =LE45&P/Q.y $ '$ =?5 ' }' R $ Q.'4Q/JEt4JyR =LE/') v'b6& $ h( 7 =?&E/'Q// P/(X)('Q/' ' 5 Q/ ] _ T(/PXFs?E.=>E. Th=>=?vQ.i ? 7 ' o E.5)K'
Q.(F|
CAML
let exponentiation x n = let p = ref(1.) in for i = 1 to n do p := !p *. x done; !p;;
de'n&)$ 05 =wQ.'EX'44 X sFP.Q.y 7 =?bh'T h56.=?bbfhQRM'S=V(5Q/b Q/hh 3|
1)K&E( 1)KM=LEth0
CAML
let rec match | 0 | 1 | _
@BA DCF E
expo_rapide x n = n with -> 1.; -> x; -> let y = expo_rapide x (n / 2) in if (n mod 2 = 0) then y *. y else x *. y *. y;; Complexit´ e de l’exponentiation rapide
jsF hQ/ " R' o ('T h50 6.=?JP8o yE / S4 >(E/P.j&)$ 05J' T a&=wQ.'EX'44 X "jsF hQ/ Q.c 5\Et(i hPi5 5(3Q.L5(f/')(Q \P. $ '$ =? iSEF Q.D/ Q/\P/ c sFb=V4Q/DNO /PX(=?(' )K jP.bR $ h5Th.D'b54fX'4(Q%
19
1
[| t.(0); ... ;t.(m); ... ; t.(n-1) |] P/ '' 5UQX *0 *0 `"*!*"* *0 ) ?" *0 Y4!*"*!* * ) de'a Q wJ /Q. P.bR$ Q.'cR $ Q.5U =?i)b('TU 6.=?JQRM' Q/ 4f/')hQ
1X
[|t.(0); ... ; t.(m-1) |] j Q.J'
QX 5(f/')(Q [|t.(m+1); ... ; t.(n-1) |] EF QRj hf/ . 7 'S-/ Q.}54fX')(V Q 5$
!
9 "
H
`
`
:
!
9
"
:
!
9
`
!.+9
>
:
H
% ' ' " P.bNSQ/ %P/(Xi'b 54E/P/R234J 5 ' o $ 54EFbP.
de'n8o CvEth&PFoK$ 54EF
"
H
2
Et( 0 )KJ QXS('
1
1
E/U
1
1
1
!/ A
>
,.#" ' ",0 % % ' ' "&
2a QRw t ) Q/w'SEt4 F P o Q. 4f/')hQ & ( "*!*!* $# ( . a/ Q/vh'' /k t )QXwQ./>f Q/ 'wNO wXP.yi)$ Et4 &` .aJ=V( .i' o h( S(&P.bfF Q/ 'bQ.(OU J'-.TQ.5 !/ AUX|
I
1 . 1X -.%P.j'f Q/ 'MNO h }(Q.b5 Q.DM$ Q/V/P.
&0
&
.
'S eU 0J'Sk-.TQ.5b!.
1 E/U
1
1
!.
1
1
z 7 5MNO / %Q.Fkv 7 ' o )KE/ | CAML
let multiplie p q = let dp = vect_length p - 1 (* degr´ e de p*)
1 :
and dq = vect_length q - 1 in (* degr´ e de q*) let r = make_vect (dp + dq + 1) 0 in (* remplit les coefficients du produit*) for i = 0 to dp do for j = 0 to dq do r.(i + j) ’a |.Q.}E.R $ P.)4iQ/ )K5 F'SkE/'b)KJP. is_empty : ’a pile -> bool
|/ QR5jQ/Y$ '$ =? =?MP. 'SkE/'
EXQ/6
9
4 ' - ,0/"# ,
85 %
,
0
sFh \de G85
* QR5 4E.EF' )$
EF hE
=8>
- ' "$ ,.- % -
/vNe =>=? P.P. Qt(' JQ//kE/'k P8o =V(TU/JQ//kE/'kPFo+h )jP/h/JQ/1 5(Q.h)/swQ/ . M EF QRb =LE/'JP.)jh ) 4E/4)7 $ ' $ =?5D
JP=V( =LEM$ (U (( )) FQ.XMNO X ?R $ QR MP. =? aQ.')$ &V.NO h5=V4Q/& iQ// 85 ;bo DQ//J 5Q/QR Gad G (( )) G80 Jde G85 QR5/{3''bNO / //b =>=? Q//Q/QXwk 7 Q/}TUQ.56/|. }EFQ.J . Q MQ/Y$ '$ =? k 7 Q./b-.' . 5&'bE.=>? $ '$ =? i PRQ.4 sF M= $ 6X P/ &h )$ ?$ '$ =? iP. 'Sk-.'M' 5
Q. X retire_file : ’a file -> ’a |Q.}E/R)$ PR)(=? P/>' o (f/54Fs h UQno Q/ XK QX5QRk)KP8o ( $ F'D kE..)$ $ E4kQ. X Q/P P/L' o+4 f.LUQ/cEF 7 P/ -.' Q/ (f/5)
.
Q.'
!
} /
23'Q/
" {\
. %P x | Sin e1 -> sin (evalue e1) | Exp e1 -> exp (evalue e1) | Plus (e1, e2) -> (evalue e1) +. (evalue e2) | Moins (e1, e2) -> (evalue e1) -. (evalue e2) | Divise (e1, e2) -> (evalue e1) /. (evalue e2) | Mult (e1, e2) -> (evalue e1) *. (evalue e2);;
de'Fno )K&EhM(TR)$ (f/'JP.PR-.y%) QR(5V (=f/ T Q/ a)4? ''}& $ ) P. wE468 7 v QY(' hP/ L6CEF h 68)7 ) =LEX' 05 )4h)7 O'DNe(QR $ '=>X' k)KEh ) F) U ')Et4 )P.L'S}56X^ /w EF XP/(w 7 P/ j/ =f. M 5h k) 5sh ^ 'PFo Q. \ P/ (XKNO =?JQ./ 5''k56X ^X Q//Q. P/ ?OQ/.)$ )(h)7 5 P print_char ‘F‘ | Var c -> print_char c | Non p1 -> print_string " non "; lin´ eaire p1 | Et (p1, p2) -> print_char ‘(‘; lin´ eaire p1; print_string " et "; lin´ eaire p2; print_char ‘)‘ | Ou (p1, p2) -> print_char ‘(‘; lin´ eaire p1; print_string " ou "; lin´ eaire p2; print_char ‘)‘;; #lin´ eaire p;; ((p ou q) et ( non p ou (p et
non q)))- : unit = ()
2a QR 5) XK Q/j' o (f/5P8o Q//E/5 EF hEF w 7 E4 P.v'S>/ 54 '&4$ (5 ')JE468 7 M
& )$ )5(5) =>=?%EF QR')?yE/5) /?h'T3$ f/ Q/) n=VhV'' ?P/.X> (6. (5 ) EFQR} QRE/E.5=?
*
*
) 5(X & o 'F8o CkEthMP8o h=vfXTUQ.$ %/ Et4jy =LE/' 7 'E/'Sh) P/w
v
"H EF QR (jQR ' % $ T(' =?JQ.XkX h5( EFU
K-RyR =>=?EF Q.b' y E. / ('T3$ f.5QX j Eh M(' 5&P.bE45 68 7 )
4 " '65%0 97 *
6.3
S´ emantique
6.3.1
´ Evaluation d’une proposition logique
;< /P&M $ 'Sk45S4f/'n
4 '6 , ,.- 65 65 ,0 ' % , 7 " ' ' - " ' "$ ,.- 7 9 % 3 '6 , - 8, ' " ))
" , ' " 3 , - % - "8- % ))
, % "8- 3 , - % - "8- % 7 ,0 ' ,.- 5%0 , - ' " "8" - % 7 ; ,.- ) )2 ' ,.-! - ' -$" ' " - ' - ,., 7 7 (( ( &% ))
7 7 (( '6 , - , ' " ))
7 B7 (( - % - % )) 7 #/ ,.- 3 -! ' 8 - ' . - ,.-! $ 5%0 -
'&' -/ , ",02" % " ' "$ ,.- 65 , 8 , ? 7
7
Exemple 8. 5 (( , 5 (( , 5 (( ,
7
7
7
' ,.-! - 8,.- 5%0 , -! 8 5%0 -- % $",0 7 7 7 7 7 , " 8, 2 ' %
5% $"$ , 8 5%0 5&% $"$ , 8 5%0 5% $"$ , 8 5&% ' # 7
' # $ 7
$7
7
5%0 /" ' " ." ' ,.- 5%0 ,0 3 , - % -2 "- % 7 M/?(Q. v5 56/.Q/vE QR=? 5Qno Q//E. hEF )KkQ//L /'QX ' TQ/wPFo Q.X$ 5vP8o 6CEF h 68)7 ) "*!*"* 4 / Ji 7 (
//tE48' o (fXQRP.3k=? (FQ/ 1 8Q.Xc / $ QX/)a' TQ/3P.)F6CEF h 68)7 ) "*!*"* w s8} )56..Q/V =LEX' 7 5wP/LR $
'QR 0X EF Q.v=? 5Q8o Q.XLE. hEF Q//?) X)$ Q/X w' TUQXwP8o 6C
EF 68 7 !*!*"* J'SvQ.(5n| } j')D6CEF h 68) 7 )c
QX\NO h5=?j) XSEtcNO 5X$ =? D/ =V('4R|
*
hf/J(' h !"
*!*"*
+ " % - -
*!*"*
t )6
" ePR X /iP. '0$ hQRy. 6CE 68 7 Q/8 JP. :RJX( A\EF Q.a hf/ .aP/ $ 5(E) 4 $ '=>XhP/ 8h( S4fX') !.MI&fF Q.vv 7 'v / $ Q/ /)J' TUQX
'
6
[ Q/&^ )3EFPRQ> Q.DQ.XQ// Uhb(Q fF QRP.'Sw5 QR5vP.P 'LE. hEF de'\C >Q// (( )) ((
hM(Q}fF Q.JP. 'S Q. P.ThQ/56/ +(' h )) J{ayE.5=?&Et(&Q//bNO h5=wQ.'jP/b'Sv' TQ/ P.bE/5 E U /\')JL =V4 / A B "J{ayE.5=?j(' hi' .t(5(/) C :RjW?)$ Q/PR5M' o $ /T=?J QR' hi' i5(f/' MP/bD$ $ !.jW?)$ Q/PR5M' o $ /T=?J QR' hi')('Q/'P. ' TUQX 7 >45S4f/' b ! "*!*!* ! R h jQ.XJNO / ?fF ' )$ // RQ/ ' o P/=> c'JX =f. P/ EF h 5 E. ) QRt X < M 7 R)$ (' 8' o+hP.P.0 kP.=? wP8o Q//w/ Q.U ''v Q/ \;< =>=? /bEt4NO =?k'S
=>=?v DP/%? 7 ' o+(P.JP8o Q/VP. => hP/PR // QR 4& /Q. &NO =? /D'k =>=? , 4DP/ k7' o (P/ P8o Q/1(QR5 P. => hP/PR // QR(h[3 F'Sk54fX' P.)=?}P.)>5} *!*"* ! * " * , * n ' Q wjP/ =? 5 %$ MEX'Q/ QREt> 4 KNe(5(> J' o lE.XP Y =LE.5')>P< $ 'hLP/VE/5 Et(T4 Q.j
E/5 EF h //'a(QL/ =f.=? EF QRw) XK Q/0LP.)kKCEF w EF /PX(=V46&$ =V4 UQX=? > 7 ' o Q./ PR >P/VP/QRy KCEF ) QR ' bP/ M) / 5Q/ QR\Et((= $ .)$ 3EF QRb X $ P.&(Q.yVKCEF MP8o TX8|
*
*
CAML
type nombre = Entier of int | Reel of float;;
{ $ U /iQ.XjNO / %Q.nhP/PR ./bP. QRyVX =f. U Q.' ( Entier (p + q) | Reel p, Reel q -> Reel (p +. q) | Entier p, Reel q -> Reel (float_of_int p +. q) | Reel p, Entier q -> Reel (p +. float_of_int q);; addition_nombres : nombre -> nombre -> nombre =
[\ 8Q. (QR5yR =LE/'JEF QRMNe(bP/b' o+450 6.= $ Q/JPX(/
|
CAML
type reel_bar = Reel of float | MInfini | PInfini ;; Le type reel_bar est d´ efini. #let rec addition x y = match (x, y) with | Reel x, Reel y -> Reel (x +. y) | Reel x, MInfini -> MInfini | Reel x, PInfini -> PInfini | MInfini, PInfini -> failwith "operation non definie" | _ -> addition y x;; addition : reel_bar -> reel_bar -> reel_bar = #addition (Reel 3.) (Reel 4.);; - : reel_bar = Reel 7.0 #addition (Reel 4.) PInfini;; - : reel_bar = PInfini #addition PInfini MInfini;; Exception non rattrap´ ee: Failure "operation non definie"
:RMBiCUEF)=?4 TUQ.=? 5
{3 )h=>' R)'SkP/ //a| CAML
#type liste = NIL | Cons of int * liste;; Le type liste est d´ efini. CAML
#let l = Cons (1, Cons(2, Cons(3, NIL)));; l : liste = Cons (1, Cons (2, Cons (3, NIL)))
J'SkNO X }Q.n)('Q/'J'Sk' .TQXQ. 0 | Cons (x, q) -> 1 + longueur q;; longueur : liste -> int =
de'8 } $ T('=? cEF fX'bP.P=? 5( ) .t^ JP.)&/ =vf/5) ' &=? h5 ' )$ iP.Q'S(/T(T0+ Sf%& Q.DE.XP 'S wP/L' o (t('C QR'y4('JeQ. Q.y
P.L'yt7 =? 5 vQ.i'S (/ NO h5=?j e C 4 R y k 4 X f (
4 e4%sF>E4 ) X hR $ ?? 7 ' | E/47 54 1P.w' o+4f/5P.w C4yRL(fX ( EF QRE. PRQ. PRQ% P. = )$ PRS( ' o hE. => &X Q/05JEF QRj.-.}E. PRQ.MQ. yD $ Q.54fX'j1) P.b=Vh56./
-
6
)
2-6,0/"
' " " '
;=V4 t P/ 'kEt( eQ.n h E /PVhQ wP.QE/5 T(=>=?)
+- ",0 5%0
- ,.-
PRQ'S(.T(TU&P.
Annexe B
Aide m´ emoire CAML J{3 5 Q/) ) Q.MP/ succ n 2aR $ P< $ ) QRiP/ pred n W&)K5 P/ 'PR QX'PR// mod bQX h &P/b'SPR }Q/ 'P..X / ('Q.b4fX
'Q/ abs U5 >R $ 'U5& int_of_float U5 V MU5M56t^ / string_of_int U5 V56t^ /bU& int_of_string " %(/0EXQ.'S4 VP.bfX05 land n p lor n p lxor n p lnot n n lsl m n lsr m :RjG8' h (
!.
*
{aJ' TUUQXJfXk 7 f/ Q%' TUQXMf/vk 7 f/ Q yR'QX NFfX0vk 7 f/ ) =LE/' $ =?cfXk 7 f/ , $ 4(' P/
fX05k 7 T(Q/56X , $ 4(' P/
fX05v 7 PR5
* *
+. -. *. /. x ** n . R $ 'XM
*
{aMfF ' $ 1( $ ('QX4 ?E45) QX4 A && B QVfF ' )$ ($ ('Qt4 VEt4 Q/ ) A || B M }fF ' $ not A ;< =LEt4( / < = > 9j;&4h)7 ,$ -.. P8o Q/}44)7 ke h ) &P8o Q//b' rev l 4`J{3R)$
h ) I ?56/Q/% print_int I ?56/Q.}R $ ' print_float I ?56/Q. 44)7 print_char I >56XQ.Xb56t^ / P.)4h)7 5) print_string 23h Lv 7 'Sk'TX print_newline() Ui Q/ ' for i = 0 to n do expression_1; ... expression_n done; while condition do expression_1; ... expression_n done;
4"MBa
Ba j =LE/'n| if condition then expression; Ba j XPR ./ ')| if condition then expression_1 else expression_2; I 'SEX' PFo Q./ yE/5) }EFQ.J%E/'Sh)) # "! J' o 45h 0 do q := !r1 / !r2; temp := !r1; r1 := !r2; r2 := !temp mod !r2; temp := !u1; u1 := !u2; u2 := !temp - !q * !u2; temp := !v1; v1 := !v2; v2 := !temp - !q * !v2 (* INV : a * u1 + b * v1 = r1*) done; (* r2 = 0, r1 = pgcd(a, b), a * u1 + b * v1 = pgcd(a, b) *) (!u1, !v1);;
'
mystere 5;; 5 4 3 2 1 1 2 3 4 5 - : unit = () #mystere "BONJOUR" 0;; BONJOUR ruojnob- : unit = ()
'
s8kE/5 => 7 &NO X Q.'b'SE/5 E.5$ M $ PFo+hP.P.0 F$ |
:
`
!%
`
P.k ''Ne)
UQX
:4 ! #
!
#
let rec binomial n p = match (n, p) with | _, 0 -> 1 | 0, _ -> 0 | _ -> (binomial (n - 1) (p - 1)) + (binomial (n -1) p);; J'SvP/QRy 7 =?J'SE/5 E.5$ M $ P.bNeh
h5 ( |
let rec binomial n p = match (n, p) with | _, 0 -> 1 | 0, _ -> 0 | _ -> n * (binomial (n - 1) (p - 1)) / p;;
'
*
234iXPRQX QR D ? /PF7 \' o hPDQX QX'.QR `RU,o+4E.()7 F' o 6CEF h 68)7 iPFo /PRQX E/Q. Q/b
'
let rotation p = let q = new () in while not is_empty p do push (pop p) q done; let temp = pop q in while not is_empty q do push (pop q) p; done; push temp p;;
0
t2a QR\' o $ '$ =? n=>.=V(' `# ) exp x (n - 1) 4('Q.' ,#
iE4DP=V4 NO / //'' ! =LEM$ 4
"R
!
R W? $ Q.50$
A! RH!
E/5 Q.bP/ ) h 5) 55=>X(
"R W?$ N4$ 5 / ) H W&)56/556X P.56/ h5 =>Q/ :UA '&)$ ( :9
A`
)GR X / 9
R)$ Q.5U 4 R)$ Q.5U c =>Xh')
:`
S
('T h50 6.=?4
"U"
:UZ
"R
9U
T B34f/'4(QRy
IN
Z XPRQ/ "R deXPRQ/ % 5Q/ QR'' de45S(&P/bf Q/ '
PMfX }NO /PX(
?PFo Q.XbNO / R $ QR U Ba Z B8 : fF XjRN4$ 5 QR !U:
".
f/Q.'' :UH NSQ/ ! Et4J/ !` Et4j$ ') : 4EXP. 9. K4f/'$ : BiCEF 9 BiCEFP.P. .& $ 9H BiCEF $ Q/=g$ R $ H" h5 49 =>=? H: =>=?j.)$ QR0NO HU:
V [\) QR H