TP1 CaML Light 4
1, Lancement de CaML light
Ceci a pour effet de déclencher I’exécution de la boucle de Lecture/Evaluation/Impression qui se
manifeste par les 2 fenétres : Terminal (Editeur et Interprétation) et History (trace des expressions).
aa ied
EDITEUR
En mode interactif, CaML donne systématiquement une réponse qui contient :
+ Lenom de la variable déclarée s'il y en a.
+ Le type trouvé pendant le typage.
+ Lavaleur calculée aprés exécution.TP1 CaML Light 2.
2. Evaluation d’expressions
Pour vous entrainer a utilisation de CAML, demandez a l’interpréte d’évaluer les expressions
suivantes (et chercher & chaque fois 4 donner un sens a la réponse de |’interpréte) :
Expressions sur les entiers :
{1098 5; 54995
——_———————— =
[276 mod 335 = —__1G*5) + (0-9)
[2L¥35+12+7 5 2.74 1053
Tint of float 1 int_of float 1.13;
Expressions sur les réels (flottants) :
3.455,
p+. 225
[foor3.145;
log 2.71828182846 3;
3.45e10;;
not tue i :
[true or false i _
Hloat_of int 763,
| (not false) or true 3
ions sur les caractéres et chaines de caractéres :
i :
char_o a =
“| "Ceci est une ch**“aine de caractére
"kArim [1] 35
[sub_string “bonjour” 03
| Stoutou* [3] s3
(Siring length “KADER™ 3,
Expressions sur les Uplets
“Ceoucou 1A Da
fst (12, “octobre“
snd (12, “octobreTP 1 CaML Light
in est une déclaration qui associe un nom a une valeur. On distingue les déclarations globales
les déclarations locales.
Expressions de déclarations globales :
Syntaxe: let nom = expr 53
ol nom représente lidentificateur et expr expression qui lui est associ
letx=55 _ Tet pi= 3.141595; a)
x z Tet rayon = 10.03;
x+25 e = | (pi *. rayon *. rayon) 55
let circonference = (2.0 *. pi *. rayon) 33
Salle
Expressions de déclarations globales simultanées ;
Symaxe: let nom, = expr)
and nom; expr>
and nom, = exprn 33
leta=3and b= 235 EE ss
a
Expressions de déclarations locales
Syntaxe: let nom = expr; in expry3s
la valeur expr: du nom nom, n’est connue que pour le calcul de expr . -
let x=2inx* x3; Teta=1and b=2 in 2*atb ]
Xi = Teta Fainb+ ay
Iety=3inx+ys3 a in ba;
Expressions de conditions :
Syntaxe: if exprgoo) then exprjelse expr2 33
La valeur de cette expression est la valeur de expr; si l’expression booléenne expraca s’évalue & true et la
valeur de expr) sinon (3 false).
{_iftrue then I else 0 3:
((G£3=5 then 8 else 10) +TP 2 CaML Light
Les Fonctions
1. Expressions fonctionnelles (fonctions anonymes).
Définition : Une expression fonctionnelle est constituée d'un (ou plusieurs) paramétre et d'un corps. Elle est
introduite par les mots réservés function (pour les fonctions & un seul argument) ou fum (pour les fonctions &
plusieurs arguments).
a/ Fonction anonyme a un seul argument :
function p > expr +;
mn qui éléve au carré son argument s'écrit en CAML:
function x -> x*x 7;
int -> int =
L'application d'une fonction 4 un argument s'éerit comme la fonction suivie par 'argument.
# (function x -> x * x) 5;
- 3: int = 25
1
Fonction anonyme a plusieurs arguments
Syntaxe : (fan py Pn -> expr 33
int -> int -> int =
| L'application d'une fonction a plusieurs arguments s'écrit comme la fonction suivie par les
arguments.
#(fun x y -> 34x + y) 45 5;
-: ant = 17
2. Définitions de fonctions
Comme dans le cas des valeurs simples, il est possible d’assigner un nom a une fonction.
Syntaxe : let nom = expr_fonc ;;
Oii nom est le nom de la fonction et expr_fone est une expression fonctionnelle (function ou fun)TP 2 CaML Li ight S
‘Comme le montrent les exemples suivants (définitions et applications):
{* Tet carre = function x -> x*x 77
ecarre : int -> int =
[! carre 5 i;
: int = 25
Piet f=funxy—->3*x+ yar —
£: int -> ant -> int =
FED A:
=: int = 10
‘Simplification de la syntaxe:
Pour simplifier lécriture, la syntaxe suivante est acceptée pour la définit
n>=1).
nn dune fonction d’arité n (avec
Syntaxe let nom p; ...Pn= expr 3;
Exemple : les deux fonctions précédentes peuvent étre définies comme suit :
¥ let carre x = x*x 77
carre : int -> int =
{filet fxysS*xtyri
i “int -> int = “
3. Ecrire en langage CAML les fonctions suivantes
= Succ qui calcule le successeur d’un entie
~ Pred qui calcule le prédécesseur d’un entier.
~ Sum qui calcule la somme de 2 entiers.
~ Max qui calcule le maximum de 2 réels.
= Max3 qui calcule le maximum de 3 réels de 2 fagons différentes (Sans utiliser Max, puis en utilisant
Max).
~ MinMax qui donne le min et le max en méme temps de 2 entiers.
~ Carre qui calcule le carre d'un entier.
- SCarre qui catcule la somme des carrés de 2 entiers (en utilisant la fonction Carre).
- ValAbs qui calcule la valeur absolue d’un enter.
= Abs qui calcule la fonction : Abs (x, y)=|x—y |
= Surf qui calcule la suface d’un cercle de rayon r ( [] = 3.14).
~ Pair qui retourne vrai si son argument est un entier pair, faux sinon.
=. Prem qui retourne vrai si son argument est un entier premier, faux sinon.2, e(2ey)
Ze ¢ TP 3 CaML Light
Les Fonctions Récursives
1. Définitions de fone
ns récursives.
Définition : Une fonction récursive est une fonction dont la définition
Syntexe let ree nom py ...Pn= expr
appel a elle-méme.
Important ; Le mot réservé rec est obligatoire pour indiquer qu'il s’agit d’une fonction récursive,
Remargue : Pour pouvoir traiter les cas de bases et le cas général, il est utile d’utiliser la structure if-then-else
dans la partie expr .
L’exemple suivant montre comment définir, en CAML, la fonction récursive « factorielle » nommée fact :
[* let rec fact n ~ ifn = 0 then I else n * fact (n-1) ;;
t
int > int =
2. Ecrire en langage CAML les fonctions récursives suivantes :
= _ Fact : factoriel d'un entier n .
=~ Exp qui calcule la tonction : Exp (x,y) =x"
~ Sigma : la somme des entiers de 0a x .
yma2 : la somme des entiers compris entre 2 entiers a et b,
- Fib:: la fonction Fibbonacci définie par
Osin=0
Fib(n) = 1 siin=1
Fib(n-1) + Fib(n-2) sinon
pecd : la fonction qui calcule le PGCD de 2 entiers, en utilisant l'algorithme d'Euclide :
PGCD (a,b) = PGCD(b,t), ot r est Ie reste de la division de a par b.
NB : Vous pourrez utiliser la fonction primitive (a mod b) qui renvoie le reste r.
= pgcd? : la fonction qui calcule le PGCD de 2 entiers, en utilisant l'algorithme
asia=b
PGCD (a,b) = PGCD (a,b) si a>b
PGCD (a, b-a) si b>a
~ SumSerie :la fonction qui calcule la somme des n premiers termes de la série harmonique de la forme
1+1/2+13+....+ In (pourn=0, la somme est 0).TPN°4
EXERCICES GENERAUX
Exercice 1
Berire une fonetion calculant le produit de deux nombres suivant la méthode de la
multiplication dite égyptienne
0 six=0
Mult_egypt (x,y) = Mult_egypt(x/2, 2*y) six est pair
Mult_egypt(x-1, y) + y sinon
Exercice 2
Eerire une fonction calculant le ppem (plus petit commun multiple). On pourra s‘aider du
pgcd (plus grand commun diviseur).
Exercice 3 :
1. Ecrire une fonction qui inverse un mot. Exemple "CAML" sera transformé en "LMAC"
2. Eerire une fonction qui reconnait les palindromes, comme "RADAR" ou
“eluparcettecrapule "
Exercice 4 : Bissextile
Ecrire et tester 1a fonction de détermination des années bissextiles utilisant la définition
suivante
«Toutes les années divisibles par 4 sont bissextiles sauf celles qui sont divisibles par 100 et
qui ne sont pas divisibles par 400. »
Exercice 5:
1- Ferire une fonction récursive qui calcule le reste de la division entiére de x par y.
2. Eerire une fonction récursive qui calcule le quotient de la division entigre de x par y
Remarque : On ne pourra pas utiliser les opérations / et modLes Listes
DP
A,Définition di fa ste =
‘Les listes sont des structures permettant de regrouper un nombre quelconque d’éléments de m&me type.,Exemples.
Tied iste doréels | Liste de caines de car Liste de ites Wentiers [Liste vide
{12.5 5 25.8) [rali” ; “omar” ; "kader") (01; 4; (5) (12; 25; 8]] i |
‘Type: flot list | Type: string list ‘Type : int list ist ‘Types lst
21 Les Opérations sur lea tstes:
Deux opérations sont prédéfinies en CAML ;
La concaténation de liste, notée @ Tiajout d'un élément en the de liste, natée
intlist= [5; 3: 8)
De
‘Deux fonctions sont prédéfinies en CAML :
yume Te 1" élément de Ta liste fonction a: retourne Ia liste sans le 1 Ament
HW [12525 518) x
int list = [25; 18),
Fonction hd:
25; 18]
‘31 Quclaues fonctions utilisant Jes listes : °
Fiatxy=xOva
F:'alist>'alist >a list =
# € (12:2) (20)
int iat (1252; 20]
FF Pow Nat) PH TG
+ istring ist= "toto"; "tata titi"; "turu")_
Ecrire en langage CAML les fonctions suivantes :
Calcule le nombre d’éléments d’une liste (nbElm).
Caléule la somme des éléments dune liste (somEtm).
Calcule la moyenne des éléments d'une liste en utilisant les fonctions nbElm et somElm.
Insére unt élément au début dune liste.
Insére un ‘élément a la fin d’une liste,
Supprime un élément au début dune liste non vide.
Supprime un élément a la fin d’une liste non vide (utiliser la fonction mbElm),
Inverse une liste.
Projette 1’élément n°I (I >0) d’une une liste non vide.
10, Détermine si un élément donné appartient ou non a une liste.
11, prend un nombre entiecet une liste d'entier et compte les occurrences de ce nombre dans cette liste.
12. Caleule la fonction Map définie par : Map fal ; 82; ... ; an] > [(fal) ; (a2); ...;fan)]
‘Distribue la fonction fsur les éléments de ia liste).
= Appliquer la fonction Map pour élever au carrée les éléments d’une liste @’entiers.
+ Appliquer la fonction Map pour inverser les mots dans une liste de mots.
13, Trie une liste dentiers par ordre croissant.
SRerayeene