Menu1 Menu2 Menu3 Menu4 Menu5 Menu6

Vous connaissez déjà Caml Light ? Voici l'essentiel pour passer facilement à OCaml.
Sommaire
Modifications importantes
   Les modules
   Les tableaux
   Les tris
Modifications légères
   Noms de fonctions
   Quelques nouvelles fonctions
   Concaténation des listes
   Fonctions supprimées
Nouveautés

I) Modifications importantes
1) Les modules

Le système de modules a été modifié. Pour charger un module, il faut en Objective utiliser la commande #load "module.???";;, l'argument étant le nom du fichier correspondant au module en question. L'extension varie avec les modules, selon la manière dont ils ont été compilés. Par exemple, le module graphique se charge avec #load "graphics.cma";;.
Une fois le module chargé, l'accès à ses fonctions ne se fait plus par « module__fonction » avec les deux tirets, mais en utilisant un point : Module.fonction, par exemple Graphics.moveto.
Il est toujours possible d'ouvrir le module pour ne plus avoir à taper son nom avant les fonctions (pour utiliser moveto au lieu de Graphics.moveto). La syntaxe est devenue : open Module;;, par exemple open Graphics;;.

2) Les tableaux
Les tableaux ne sont plus nommés vects, mais arrays. Il en découle des changements dans les noms de fonctions s'y rapportant (voir plus bas). Cependant, le comportement des tableaux est inchangé : ils restent des familles d'objets de même type, numérotés et en nombre variale.

3) Les tris
La fonction « sort__sort » qui sert en Light à trier des listes selon un prédicat d'ordre existe toujours en OCaml, elle est nommée Sort.list. On dispose en plus de la fonction Sort.array qui trie un tableau. Ces deux fonctions sont cependant dépréciées : elles n'existent en OCaml qu'en tant que survivances de Light. On dispose en effet de deux fonctions plus performantes.
La fonction List.sort trie toujours une liste selon un prédicat, mais ce prédicat doit désormais faire correspondre à deux valeurs un entier positif si le premier est plus grand, négatif si le second est plus grand et 0 s'ils sont égaux. De plus, la fonction doit vérifier « (f x y > 0) => (f y x < 0) » et « ((f x y > 0) et (f y z > 0)) => (f x z > 0) ». Array.sort fait de même avec un tableau.

II) Modifications légères
1) Noms de fonctions

Certaines fonctions ont été renommées, principalement en raison du nouveau mode de fonctionnement des modules et du renommage des vects en arrays :
vect_length devient Array.length
sub_vect devient Array.sub
make_vect devient Array.make
list_length devient List.length (car le module List n'est plus ouvert automatiquement)
hd devient List.hd
tl devient List.tl
rev devient List.rev
combine devient List.combine
split devient List.split
mem devient List.mem
mem_assoc devient List.mem_assoc
string_length devient String.length
sub_string devient String.sub
make_string devient String.make
La fonction power pour mettre des entiers en puissance n'existe plus. On peut toutefois le faire sur des flottants avec l'expression a**b.

2) Quelques nouvelles fonctions
Voici quelques fonctions qui n'étaient pas disponibles en Light mais n'apportent pas de grande innovation.
bool_of_string et string_of_bool créent la relation entre les deux booléens et les chaînes de caractères qui leurs correspondent.
La fonction draw_rect du module graphique a été rajoutée, vous n'avez plus besoin de tracer vos rectangles côté par côté. De même, vous pouvez tracer le contour de tout polygone avec draw_poly, recevant les mêmes arguments que fill_poly que vous connaissiez déjà en Light.

3) Concaténation des listes
On n'est plus obligé de concaténer les listes par deux. Bien que l'arobase permette toujours de concaténer deux listes, on peut utiliser la fonction List.concat qui reçoit un nombre quelconque de listes (regroupées dans une liste) et rend la grande liste concaténée.
De même, plusieurs chaînes de caractères peuvent être concaténées en même temps (String.concat) avec en plus la possibilité de définir un séparateur inséré à chaque fois. Par exemple, String.concat "/" ["10";"09";"2006"] donne "10/09/2006".

4) Fonctions supprimées
Les fonctions add_int, sub_int, mult_int, div_int, minus, add_float, sub_float, mult_float, div_float et minus_float n'existent plus. Utilisez les opérateurs classiques : + - * / +. -. *. /..
De même, string_of_char n'existe plus.

III) Nouveautés
D'abord, si vous aviez appris Light avec la version 1 de ce site, sachez que vous pouvez faire des récupérations d'erreurs et des manipulations de fichiers. Ce ne sont pas vraiment des nouveautés, car c'était possible en Light, mais comme je n'en parlais pas dans la version 1 je vous incite à lire les deux cours correspondants : ici et .
En revanche, une vraie nouveauté d'Objective est la possibilité de communiquer entre les langages Caml et C, c'est-à-dire utiliser des fonctions écrites dans un des langages à l'intérieur de programmes rédigés dans l'autre. Ne connaissant pas C moi-même, je vous renvoie au manuel de Caml.
Enfin, Objective Caml vous propose des compilations plus efficaces, notamment la possibilité de créer des exécutables autonomes. Voyez la page dédiée.

> Haut de la page