Cours Caml
Objective Caml est un langage fonctionnel, fortement typé, non spécialisé.
Successeur de Caml Light (lui meme successeur du « Caml lourd »). De la famille ML. Autre membre connu : SML (« Standard ML »).
Conçu et implémenté `a l’INRIA-Rocquencourt par Xavier Leroy et d’autres.
Utilisations principale : enseignement, calcul symbolique, logiciels d’analyse statique (Microsoft, ENS), mais aussi logiciels de manipulation de fichiers (Unison, MLDonkey…)
En Caml, les variables ont un type. Pas de passage « mystérieux » d’un type à l’autre. Pas de jeu sur les pointeurs comme en C. Types référence mais sans « valeur nulle ».
Conséquence sécurité d’exécution : impossible d’avoir des « segmentation fault » ou « null pointer exception ».
Contrepartie parfois plus lourd que des langages non typés ou à typage faible comme Scheme, Common Lisp ou Perl.
Cours Caml les types simples de Caml sont :
– Les booléens bool (true et false), n’ayant que les deux valeurs de vérité vrai et faux,
– Les entiers int (les entiers de -230 à 230 – 1),
– Les caractères char, attention ils sont délimités avec les anti-apostrophes,
ainsi par exemple ,
– Les chaînes de caractères « string » (encadrés de guillemets), ainsi ,
– Les réels float (à ce propos entiers et réels ne sont pas compatibles à moins d’en donner l’ordre par #open « float » dans certaines versions de Caml, sinon + – * / doivent être suivis d’un point).
– Le type unit est le type dont l’unique valeur notée () est vide c’est le « void » du C.
Les types forment une algèbre avec ces constantes (int, unit, char…), des variables ‘a, ‘b,… des constructeurs unaires (list, stream, vect…) et binaires (*, ->…).
Cours Caml exemples de calculs de types :
On donne ici une suite d’expressions dont il n’est pas toujours facile de comprendre les contraintes qui ont amené Caml à renvoyer ses résultats.
Prenons l’exemple suivant, il s’agit d’une définition de f s’appliquant sur 3 arguments, d’abord, celui qui est nommé g, et qui, d’après le corps de la définition est obligatoirement une fonction s’appliquant sur un couple. Ceci signifie que si x est de type a et y de type b, alors g(x, y) est de type c.
Aussi, l’interpréteur Caml attribue-t-il des noms de types a, b, c respectivement pour les arguments x, y et pour le résultat de g. Puis, Caml va indiquer que le type du premier argument de f est donc a*b -> c, à la condition que celui du second x soit a et celui du dernier y soit b, en ce cas, le type retourné sera celui de g, c’est à dire c.
Pourquoi CAML ???
CAML est un langage fonctionnel : tout peut être vu au sens des fonctions mathématiques.
1 : CAML fait beaucoup de vérification automatiques et laisse peut de place à l’erreur.
2 : Langage interpréter : il existe un programme (OCAML) qui permet de tester les
instructions sans passer par la compilation.
Construire correctement un type :
Bien que les vérifications syntaxiques sur les types définis par CAML soient assez faibles, on veut « bien construire » un type de données avec l’ensemble de ses propriétés. On va toujours construire un nouveau type en 3 étapes : ces étapes sont importantes notamment pour des programmes un peu longs (avec beaucoup de fonction), pour nous permettre de modifier le type sans modifier toutes les fonctions qui l’utilisent.
1- : définir le type (type truc = profile).
2- : écrire une fonction constructeur ou générateur, qui permet de créer une instance d’objet de ce type.
c’est ici qu’on peut vérifier la validité des pré-conditions
3- : écrire des fonctions dites accesseurs ou sélecteurs qui permettent d’extraire les
différents éléments du type composé.
On aura autant d’extracteurs qu’il y a d’élément dans le type composé.
Listes :
La liste est une structure de donnée fondamentale de Caml, et elle bénéficie d’une
syntaxe particulière. Une liste ne peut contenir que des éléments de même type.