I. Introduction▲
Le langage Caml (il faut prononcer « Camel ») est un langage de programmation fonctionnel de la famille ML. ML a été inventé par l'équipe de Robert Milner à Edimbourg. C'était à l'origine un métalangage (d'où son nom) pour un système de vérification de preuves. C'est devenu ensuite un langage de programmation complet.
Plusieurs versions de ML sont maintenant disponibles, dont les plus connues sont Standard ML et Caml. Caml a été conçu à l'INRIA (Institut National de Recherche en Informatique et Automatique). Deux versions de Caml existent actuellement : Caml Light et Objective Caml. Caml Light est bien adapté à l'apprentissage de la programmation. Objective Caml, qui intègre Caml Light, permet la manipulation d'objets et dispose d'un compilateur très performant. Ces deux langages tournent sous UNIX, Windows et MacOS. C'est Caml Light qui est utilisé comme support de ce cours. C'est un logiciel libre qui peut être téléchargé à partir du site Web de de l'INRIA ( http://www.inria.fr ).
Les principales caractéristiques de Caml, sont les suivantes :
- Caml est un langage fonctionnel. Les fonctions sont des valeurs à part entière qui peuvent être argument ou valeur d'une fonction ;
- Caml possède une syntaxe conviviale ;
- Caml est un langage typé. Les types des variables ne sont pas déclarés par le programmeur mais calculés automatiquement par l'interprète Caml ;
- Caml supporte le filtrage, le polymorphisme et le traitement des exceptions ;
- Caml permet la programmation impérative.
Un programme Caml manipule des valeurs. Une valeur peut être une valeur de base (un nombre, un booléen, un caractère, une chaîne de caractères), une valeur structurée (un n-uplet , une liste ou un enregistrement ) ou bien une fonction . Toute valeur a un type. Un programme Caml se présente comme une suite de phrases qui sont soit des expressions à évaluer , soit des définitions . Une expression est construite à partir : de constantes littérales représentant des valeurs de base, de noms de valeurs , de constructeurs de valeurs structurées et de l'opération d' application d'une fonction. La valeur d'une expression est calculée en effectuant toutes les applications qu'elle contient. On dit que l'expression a été évaluée, réduite ou simplifiée. Une définition consiste à donner un nom à la valeur d'une expression.
Voici, par exemple, un programme Caml qui définit la longueur et la largeur d'un rectangle puis en calcule le périmètre.
#let lon = 15;;
#let lar = 5;;
#2 * (lon + lar);;
La valeur de ce périmètre est obtenue par les applications successives des fonctions prédéfinies + et *.
Avant de commencer l'étude de Caml voici quelques informations sur son utilisation en mode interactif. Le caractère d'invite (« prompt » en anglais) est le caractère #. A son invite, le programmeur peut entrer une phrase qui peut tenir sur plusieurs lignes et doit se terminer par ;;. La phrase est validée par un retour chariot. Caml affichera alors :
- soit un message d'erreur ;
- soit une réponse constituée en général d'une valeur et de son type.
Par exemple :
#(3 + 7) * 5;;
- : int = 50
L'expression (3 + 7) * 5 est anonyme (-) de type int (entier) et a pour valeur 50.
Trois types d'unités lexicales apparaissent dans un programme Caml : des identificateurs , des mots - clés réservés et des symboles spéciaux . Un identificateur est un mot composé d'une lettre suivie ou non d'une suite de caractères dont chacun peut être une lettre, un chiffre, le caractère _ ou le caractère '. Par exemple :
l1 les_villes x'1
Les symboles spéciaux sont utilisés comme séparateurs ou bien pour désigner les opérateurs les plus courants (+ ou <=, par exemple). Les mots-clés réservés sont des identificateurs qui jouent un rôle particulier dans le langage (if, then ou else, par exemple).
Plusieurs livres sur Caml ont été écrits. Ce cours est fortement inspiré de trois d'entre eux :
- Pierre Weis, Xavier Leroy, Le langage Caml , InterEditions ;
- Xavier Leroy, Pierre Weis, Manuel de référence du langage Caml , InterEditions ;
- Thérèse Accart Hardin, Véronique Donzeau-Gouge Viguié, Concepts et outils de programmation. Le style fonctionnel, le style impératif avec Caml et Ada , InterEditions.
Les deux premiers livres ont été écrits par les concepteurs de Caml et de Caml Light. Le premier, remarquablement écrit, est plus qu'un cours sur Caml : c'est un véritable cours de programmation. Dans sa deuxième partie il présente un choix d'exemples très complets qui démontrent l'expressivité et la puissance de Caml. Le troisième livre est issu d'un cours de premier cycle du CNAM. L'idée était d'introduire la programmation fonctionnelle puis la programmation impérative à partir des langages Caml et Ada. La première partie du livre est consacrée à Caml dont la sémantique est présentée de façon très claire. On trouvera de plus, dans ce livre, un grand nombre d'exercices corrigés.