Feuille d'exercices 1

In [ ]:
#use "/opt/camllight.ml"

Question 1

Quelle sera la valeur de b ?

Devinez la réponse avant de tester.

let a = 2 ;;
let f x = a * x ;;
let a = 3 ;;
let b = f 2 ;;
In [ ]:

Question 2

Quelle sera la valeur de b ?

let a = 2 ;;
let a = 3 and f x = a * x ;;
let b = f 2 ;;
In [ ]:

Question 3

Définir des expressions Caml de types :

  1. (int -> int) -> int

  2. int -> (int -> int)

  3. int -> int -> int

  4. int -> (int -> int) -> int

In [ ]:

Question 4

Déterminer sans utiliser l'interpréteur Caml le type des expressions suivantes :

  1. fun f x y -> f x y

  2. fun f g x -> g (f x)

  3. fun f g x -> (f x) + (g x)

  4. let h (f, g) = function x -> f (g x)

Vérifiez ensuite avec l'interpréteur.

In [ ]:

Question 5

Définir une fonction de type bool -> bool -> bool représentant l'opérateur logique $\Rightarrow$.

In [ ]:

Question 6

L'opérateur de différence finies $\Delta$ associe à toute suite $(u_n)_{n\in\mathbf{N}}$ la suite $(u_{n+1}-u_n)_{n\in\mathbf{N}}$.

Écrire une fonction delta qui réalise cette transformation.

Donnez tout d'abord le type de cette fonction.

In [ ]:

Question 7

Définir une fonction curry qui transforme une fonction à deux variables non currifiée en une fonction curryfiée, puis une fonction uncurry qui réalise la transformation inverse.

In [ ]:

Question 8

Définir un type rational permettant de représenter un nombre rationnel.

In [ ]:

Question 9

Définir une fonction egal r1 r2 qui indique si les rationnels r1 et r2 sont égaux.

In [ ]:

Question 10

Définir la fonction récursive pgcd n m qui retourne le plus grand diviseur commun des entiers n et m.

Utilisez pour cela l'algorithme d'Euclide.

In [ ]:

Question 11

Définir la fonction simplify r qui retourne le rationnel r sous forme irréductible.

In [ ]:

Question 12

Définir les fonctions add mul qui retournent respectivement la somme et le produit de deux rationnels. Les rationnels sont retournés sous forme irréductible.

In [ ]:

Question 13

On considère les types couleur et carte ci-dessous :

type couleur = Pique | Coeur | Carreau | Trefle
and carte =
  | As of couleur
  | Roi of couleur
  | Dame of couleur
  | Valet of couleur
  | Numero of int * couleur
;;

Définir une fonction carteAlea qui retourne une carte au hasard.

Utilisez la fonction Random.int n qui retourne un entier au hasard entre 0 et n - 1.

In [ ]:

Question 14

Définir deux fonctions is_lower c et is_upper c qui retournent true si le caractère c est une lettre minuscule, respectivement une lettre majuscule.

Consultez sur l'internet l'ordre des caractères dans la table ASCII et utilisez la fonction int_of_char.

In [ ]:

Question 15

Définir la fonction upper c qui retourne le caractère majuscule si c est une minuscule ou qui retourne le caractère lui-même sinon.

In [ ]:

Question 16

Définir la fonction string_letters s qui retourne true si la chaîne de caractères s ne contient que des lettres non accentuées et retourne false sinon.

Sans while ni for le seul espoir est d'écrire une fonction récursive.

La fonction string_length sera sans doute utile.

In [ ]: