Vous êtes sur la page 1sur 8
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, “octobre TP 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 mod Les 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

Vous aimerez peut-être aussi