Utilisateur:Regards sur sciences/OCaml

Une page de Wikiversité, la communauté pédagogique libre.

Traits généraux[modifier | modifier le wikicode]

  • Typage statique, inférence des types par le compilateur. Idée naïve du polymorphisme.
  • Passage par valeur.
  • Portée lexicale : lorsqu'une définition utilise une variable globale, c'est la valeur de cette variable au moment de la définition qui est prise en compte.
  • Curryfication des fonctions. Fonction d'ordre supérieur.
  • Gestion automatique de la mémoire.
  • Les retours à la ligne et l'indentation ne sont pas signifiants mais sont nécessaires pour la lisibilité dub code.

Définitions et types de base[modifier | modifier le wikicode]

  • let, let rec (pour des fonctions), let rec ... and ..., fun x y -> e.
  • let v= e in e',let rec f x= e in e'.
  • Expression conditionnelle if e then ev else ep.
  • Types de base: int et les opérateurs +, —, *, I, l'opérateur mod quand toutes les grandeurs sont positives; exception Division_by_zero; f bat et les opérateurs +., -., *., I. ; bool, les constantes true et f aise et les opérateurs flot, &&, 11 (y compris évaluation paresseuse). Entiers et flottants sont sujets aux dépassements de capacité.
  • Comparaisons sur les types de base: =, <>, <,>, <=, >=.
  • Types char et string; 1 x 1 quand x est un caractère imprimable, 'x' quand x est constituée de caractères imprimables, String. length, s. [i], opérateur . Existence d'une relation d'ordre total sur char. Immuabilité des chaînes.

Types structurés[modifier | modifier le wikicode]

  • n-uplets; non-nécessité d'un match pour récupérer les valeurs d'un n-uplet.
  • Listes: type 'a list, constructeurs [] et : :, notation [x; y; z] ; opérateur @ (y compris sa complexité); List. length. Motifs de filtrage associés.
  • Tableaux: type 'a array, notations [I ... I], t. (i), t. (i) <— y; fonctions length, make, et copy (y compris le caractère superficiel de cette copie) du module Array.
  • Type 'a option.
  • Déclaration de type, y compris polymorphe.
  • Types énumérés (ou sommes, ou unions), récursifs ou non; les constructeurs commencent par une majuscule, contrairement aux identifiants. Motifs de filtrage associés.
  • Filtrage: match e with Po —> u0 I Pi —> u1 ...; les motifs ne doivent pas comporter de variable utilisée antérieurement ni deux fois la même variable; motifs plus ou moins généraux, notation -' importance de l'ordre des motifs quand ils ont des instances communes.

Programmation impérative[modifier | modifier le wikicode]

  • Absence d'instruction; la programmation impérative est mise en oeuvre par des expressions impures; unit, O.
  • Références: type 'a ref, notations ref, !, : =. Les références doivent être utilisées à bon escient.
  • Séquence ;. La séquence intervient entre deux expressions.
  • Boucle while c do b done; boucle for u = d to f do b done.

divers[modifier | modifier le wikicode]

  • Usage debegin ... end.
  • print_int, print_float, print_string, read_int, read_float, read_line.
  • Exceptions: levée et filtrage d'exceptions existantes avec raise, try ... with ...; dans les cas irrattrapables, on peut utiliser f ailwith.
  • Utilisation d'un module: notation M.f. Les noms des modules commencent par une majuscule.
  • Syntaxe des commentaires, à l'exclusion de la nécessité d'équilibrer les délimiteurs dans un commentaire.

Traits divers[modifier | modifier le wikicode]

  • Types de base: opérateur mod avec opérandes de signes quelconques, opérateur **.
  • Types enregistrements mutables ou non, notation {c0 : t0; c1 : t1; . . . }, {c : t0; mutable C1

t1; ... }; leurs valeurs, notations {c0 = V0; c1 = V1; . . . }, e. c, e. c <— V.

  • Fonctions de conversion entre types de base.
  • Listes: fonctions mem, exists, for_ail, f liter, map, iter du module List.
  • Tableaux: fonctions make_matrix, in, mem, exists, for_ail, map et iter du module Array.
  • Types mutuellement récursifs.
  • Filtrage: plusieurs motifs peuvent être rassemblés s'ils comportent exactement les mêmes variables.

Notation f unct ion Po > V0 I Pi > V1

  • Boucle for y = f downto d do b done.
  • Piles et files mutables: fonctions create, is_empty, push et pop des modules Queue et Stack ainsi

que l'exception Empty.

  • Dictionnaires mutables réalisés par tables de hachage sans liaison multiple ni randomisation par le

module Hashtbl : fonctions create, add, remove, mem, f md (y compris levée de Not_f ound), f ind_opt, iter.

  • Sys.argv.
  • Utilisation de ocamic ou ocamlopt pour compiler un fichier dépendant uniquement de la biblio-

thèque standard.

Gestions des ressources de la machine[modifier | modifier le wikicode]

  • Gestion de fichiers: fonctions open_ in, open_ out, clo se_ in, clo se_ out, input _une, output -string. * Fils d'exécution: recours au module Thread, fonctions Thread. create, Thread. j 0m.
  • Mutex: recours au module Mutex, fonctions Mutex. create, Mutex. lock, Mutex.unlock.