Option Informatique

publicité
Lycée Alphonse Daudet MPSI
Année 2016-2017 TP Option Info
Option Informatique
TP
n◦ 1
: prise en main de Caml
Important : gardez une copie de votre code sur votre clé. Il vous faudra utiliser un éditeur et je ne sais pas ce qui est
disponible sur votre machine. Débrouillez-vous (au pire utilisez le bloc-note). L'extension d'un chier Caml est .ml
Exercice 1.
Quelques opérations sur les int et les float
1. Faire acher le type de (prefix /) et de (prefix /.).
En déduire ce que font / et /. et les tester sur quelques exemples.
2. Écrire une fonction div : int -> int -> float prenant comme arguments deux entiers a et b, et retournant
le ottant correspondant à ab . La tester. Puis exécuter la ligne #infix "div";; : que se passe-t-il ?
3. Faire calculer à Caml la somme des ottants 2.0 et 3.0.
Exercice 2.
Le type unit
Le type unit est le type rien en Caml (correspondant à NoneType en Python). Le point de vue est le même qu'en
Python ; quand une fonction ne retourne rien, alors on peut considérer qu'elle retourne quelque chose : rien.
1. Faire acher le type de ().
2. Écrire une fonction constante prenant 0 argument et retournant l'entier 2.
Attention, ce n'est pas pareil qu'une variable égale à 2.
3. Écrire une fonction prenant un argument, sans eet de bord, et ne retournant rien.
4. Écrire une fonction sans argument, qui ne retourne rien, mais qui a pour eet de bord d'acher le message
Hello, world ! sur la sortie standard.
Exercice 3.
Quelques boucles for en Caml
1. Écrire une fonction affiche : int -> unit prenant comme argument un entier n, ne retournant rien, mais
ayant pour eet de bord d'acher tous les entiers entre 1 et n.
2. Si votre fonction ne saute pas à la ligne entre chaque entier, la modier pour qu'elle le fasse. Si elle saute à la
ligne entre chaque entier, la modier pour qu'elle ne le fasse plus. Garder une copie de la fonction précédente.
3. Modier
votre fonction en une fonction de type int -> int ayant le même comportement mais retournant
n j 2k
P
k
au lieu de rien. Garder une copie des fonctions précédentes.
4
k=1
Exercice 4.
Filtrage
Le ltrage (pattern-matching en anglais) est une fonctionnalité très pratique de Caml 1 , 2 . Pour ltrer on utilise l'expression match ... with ... en séparant chaque branche par le symbole | (le premier est optionnel). À titre d'exemple,
voici comment on pourrait coder la fonction qui associe à tout entier non nul n l'entier n − 1, et à 0 l'entier 0.
pred n =
| 0 −> 0
| n −> n − 1 ; ;
let
match
n
with
1. Réécrire la fonction factorielle : int -> int en utilisant un ltrage plutôt qu'une instruction conditionnelle.
2. Écrire une fonction xor : bool -> bool -> bool (ou exclusif) en utilisant le ltrage.
On pourra ltrer sur le couple (b1,b2), où b1 et b2 sont les deux arguments.
3. Écrire une fonction ith : 'a list -> int -> 'a permettant d'obtenir le iième élément d'une liste. Comportement arbitraire si i dépasse la longueur de la liste. Indication : ltrer sur la liste, pas sur l'entier.
1. Note pour Gout : essayez de faire ltrer Python, c'est beaucoup moins évident qu'en Caml.
2. Bien sûr, sur les petits exemples de ce TP, on peut très bien se passer de ltrage en utilisant seulement des if...
Téléchargement