Notice d'utilisation © 2005 2006 2007 Florent Monnier Ce document est distribué

Notice d'utilisation © 2005 2006 2007 Florent Monnier Ce document est distribué sous licence FDL, ce qui signifie que vous pouvez le redistribuer avec ou sans améliorations du moment d'en conserver le droit d'auteur (copyright) et la licence. Vous êtes également invité à m'écrire pour me suggérer des améliorations, ou simplement pour me soumettre des suggestions Merci à Xavier Hienne pour la relecture. Vous pouvez aussi trouver le contenu de cette page wikifiée. Introduction à OCaml Objective Caml (noté OCaml par la suite) est un langage de script et de programmation, ce document à pour but d'en proposer une introduction concise et d'être accessible à tous, et ce, même sans connaissances préalable en programmation ou scripting. Si vous êtes débutant et que vous ne comprennez pas certaines parties, n'hésitez pas à me le signaler, ou à me demander des précisions sur certains points, ou au contraire à en apporter pour enrichir ce didacticiel Tout d'abord une courte présentation d'Objective Caml (OCaml). Il s'agit d'un projet initié par l'INRIA. Le langage OCaml fournit une exceptionnelle sureté d'exécution notament grâce au fait que tout ses éléments soient « TRÈS FORTEMENT TYPÉS ». Ce dernier point requière un certain temps d'adaptation au début, mais est une aide très précieuse par la suite. L'interpréteur intractif Les types primitifs Le Transtypage Les tableaux Les listes Les Tuples Les Fonctions Condition IF La Boucle FOR Les Boucles avec des Fonctions Filtrage avec MATCH Iteration sur les listes et les tableaux Les Enregistrements Les Variants Mise en garde contre les tableaux Récursivité Terminale Script et exécutable Tutoriel pour OCaml http://www.linux-nantes.org/~fmonnier/ocaml/didacticiel-ocaml.php 1 sur 17 06/07/2011 16:00 Les différents modes d'exécution OCaml fournit plusieurs modes d'exécution possibles : en BINAIRE, code natif compilé (comme le C et avec des performances équivalentes) en BYTECODE exécuté à l'aide d'une MACHINE VIRTUELLE (comme Java et avec des performances équivalentes) en INTERPRÉTÉ avec l'interpréteur (comme Perl ou PHP et avec des performances équivalentes) en INTERACTIF avec une boucle d'interaction nommée " toplevel" (comme avec la commande 'python') Tous ces modes d'exécution seront vus plus en détail ultérieurement. Dans ce premier épisode nous n'utiliserons que la boucle d'interaction. Les styles de programmation OCaml offre deplus la possibilité d'adopter la plupart des styles de programmation : fonctionnel, impératif, objet, modulaire et de les mélanger. Malgré tout OCaml se prête particulièrement bien au style de programmation fonctionnel, car utilisé correctement, les effets de bord étant alors évités, et associé au typage fort, la sureté d'exécution est alors excellente, et il est virtuellement possible de réaliser des logiciels garantis sans aucuns bugs. V oici pour vous mettre l'eau à la bouche et vous donner l'envie de continuer. Maintenant pour pouvoir suivre le premier volet de cette initiation, téléchargez et installez OCaml à partir de : http://caml.inria.fr/ocaml/release.fr.html ou bien à l'aide de l'installeur fournit par votre distribution. Lancez l'interpréteur intractif Maintenant la première chose à faire est de commencer à se familiariser avec le système de typage d'OCaml. Rassurez-vous, même si vous trouverez peut-être cela contraignant au début, on intègre très vite ce système pour l'utiliser de manière naturelle. Pour commencer à s'y frotter, le meilleur moyen est d'utiliser l'interpréteur interactif (le "toplevel"). Pour cela commencez une nouvelle session en tapant dans votre console la commande 'ocaml'. La version d'OCaml sera alors affichée en guise d'introduction, suivie du prompt d'OCaml qui attendra que vous entriez la première expression. [blue_prawn@azur ~]$ ocaml Objective Caml version 3.09.3 # Toutes les expressions ou suite d'expressions doivent se terminer par deux points virgule comme ceci ';;'. Pour comprendre le système de typage nous allons tout d'abord voir les types primitifs qui sont les éléments de bases. Tutoriel pour OCaml http://www.linux-nantes.org/~fmonnier/ocaml/didacticiel-ocaml.php 2 sur 17 06/07/2011 16:00 Les types primitifs 1) Le type entier (décimal), tapez au prompt : # 4 ;; OCaml vous indiquera alors en réponse le type de l'expression que vous venez d'entrer, suivit de sa valeur : - : int = 4 2) Le type nombre à virgule (flottante) : # 8.6 ;; - : float = 8.6 Le point est obligatoire pour indiquer le type flottant, même s'il n'y a rien après : # 12. ;; - : float = 12. Sinon nous aurions un entier : # 12 ;; - : int = 12 3) Le type booléen, dont la valeur vaut soit vraie soit fausse : # true ;; - : bool = true # false ;; - : bool = false 4) Le type caractère (un et un seul caractère). Ils sont indiqués entre guillemets simple : # 'e' ;; - : char = 'e' 5) Le type chaîne de caractères (zéro ou plusieurs caractères), placées entre guillemets doubles : # "Objective Caml" ;; - : string = "Objective Caml" L'opérateur de concaténation des chaînes de caractère est : # "Objective " ^ "Caml";; - : string = "Objective Caml" Pour accéder à un des caractères d'une chaîne de caractères, vous pouvez procéder comme suis : # "Objective Caml".[3] ;; - : char = 'e' Comme vous pouvez le constater le type renvoyé est bien le type caractère char vu précédemment. L'index commence à zéro pour le premier caractère. Si l'on tente d'accéder à un caractère au delà du dernier, une exception est levée : # "Objective Caml".[26] ;; Exception: Invalid_argument "index out of bounds". Définir, lever et rattraper des exceptions sera vu ultérieurement. 6) Le type « unit » : # () ;; - : unit = () Ce type est une sorte d'entité vide. Il est utilisé par exemple lorsqu'une fonction ne prend Tutoriel pour OCaml http://www.linux-nantes.org/~fmonnier/ocaml/didacticiel-ocaml.php 3 sur 17 06/07/2011 16:00 pas d'argument particulier. C'est également le type renvoyé par une fonction qui réalise une action mais ne renvoie aucune valeur particulière. Ce type n'est pas à proprement parlé l'équivalent de ce que l'on retrouve sous le nom de « void » ou « NULL » dans d'autres langages, car l'usage du type unit peut aller bien au delà. Une fonction n'ayant pas une réelle valeur de retour retourne le type « unit » : # print_endline "OCaml" ;; OCaml - : unit = () Ici la fonction réalise une action (afficher du texte) et ne retourne rien, à part le type « unit ». Transtypage Comme il est dit et répété OCaml est fortement typé pour éviter les erreurs de programmation. Il n'est ainsi pas possible de faire le transtypage (convertir le type) implicitement d'un élément, il faut le faire explicitement ! (Vous rencontrerez parfois aussi le terme "coercition" à la place de transtypage.) Pour obtenir un nombre à virgule à partir d'un entier : # float_of_int 16 ;; - : float = 16. Et inversement : # int_of_float 12.0 ;; - : int = 12 Pour obtenir le code ascii (encodage de caractères) d'un caractère : # int_of_char 'A' ;; - : int = 65 Et inversement : # char_of_int 97 ;; - : char = 'a' Idem pour réaliser des opérations arithmétiques, les nombres doivent être de même type : # 4 + 6 ;; - : int = 10 Les opérateurs arithmétiques agissant sur les flottants doivent être suffixés par un point : # 2.4 *. 1.2 ;; - : float = 2.88 Combinaison des deux types avec transtypage : # (float) 9 /. 1.2 ;; - : float = 7.5 Pour réaliser un transtypage il ne s'agit pas d'indiquer le type souhaité avant l'expression entre parenthèse comme pourrait le suggérer cet exemple, il faut utiliser une fonction qui réalise la conversion de type. En l'occurrence ici float n'est qu'un alias de la fonction float_of_int vue plus haut, et placer cette fonction dans un tuple (les tuples seront vus plus bas) n'influe en rien sur son fonctionnement. Pour définir un élément nommé (une valeur ou une fonction) on utilise le constructeur Tutoriel pour OCaml http://www.linux-nantes.org/~fmonnier/ocaml/didacticiel-ocaml.php 4 sur 17 06/07/2011 16:00 'let' : # let my_item = 128 ;; val my_item : int = 128 Ci-dessus l'élément est de type entier int, il pourra donc être utilisé partout où un entier int est attendu. OCaml, en réponse à l'entrée, indique ici en plus le nom de l'élément. (Ce nom ne peut pas commencer par une majuscule ou un chiffre.) Vérifiez que le lien a bien été défini : # my_item ;; - : int = 128 L'expression définie ci-dessus n'est pas à proprement parler ce que l'on appelle une variable dans d'autres langages (on pourrait les voir comme des variables constantes), car sa valeur ne peut être "réellement modifiée", même s'il est possible d'en créer une nouvelle portant le même nom (et ce même à partir de la précédante) : # let my_item = my_item * 2 ;; val my_item : int = 256 Mais il vaux mieux éviter ce genre de chose car c'est le début d'une dérive vers le style impératif. Si lors d'une modification ultérieure du programme vous supprimez la "redéfinition", ce sera donc la précédante qui sera utilisée, et cela peut potentiellement être inapproprié. Dans le cas ci-dessus il vaut bien mieux utiliser un nouveau nom uploads/s3/ tutoriel-pour-ocaml.pdf

  • 28
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager