« Premiers pas en OCaml » : différence entre les versions

Contenu supprimé Contenu ajouté
Watermy (discussion | contributions)
Ajout des leçons
Watermy (discussion | contributions)
Retrait des informations redondantes
Ligne 3 :
| département = Programmation informatique
| 1 = {{C|Installation|2| }}
| 2 = {{C|Types|01|?}}
| 3 = {{C|Opérations|01|?}}
| exo1 = {{Exo|QCM|0|?}}
| niveau = 13
}}
 
 
Nous allons d'abord nous familiariser avec le langage OCaml.
Pour cela lancez l'interpréteur OCaml dans un invite de commande.
<source lang="bash"> ocaml </source>
Si vous avez bien installé OCaml vous devriez voir le prompt d'OCaml apparaître.
<source lang="bash"> # | </source>
En OCaml et contrairement à d'autres langage de programmation les expressions finissent par deux points-virgules.
<source lang="ocaml"> <expression>;; </source>
 
 
== Types basiques ==
 
OCaml est statiquement typé. Pourtant le type n'est jamais explicitement donné par le développeur.
C'est l'une des puissance de OCaml qui utilise l'inférence de type pour déterminer à la compilation le type utilisé.
Voyons ce que peut faire OCaml sur quelques exemples.
 
=== Les entiers (''Integer'') ===
Commencez par taper un entier :
<source lang="ocaml"> 1;; </source>
La ligne suivante s'affiche.
<source lang="ocaml"> - : int = 1 </source>
 
 
=== Les réels/flottants (''float'') ===
Maintenant un réel (composé d'un point '.')
<source lang="ocaml"> 1.0;; </source>
ou encore <source lang="ocaml"> 1.;; </source>
La ligne suivante s'affiche.
<source lang="ocaml"> - : float = 1. </source>
 
=== Les caractères (''character'') ===
 
Puis un caractère encadrés par de simples apostrophes (''simple quote'')
<source lang="ocaml">'c';; </source>
<source lang="ocaml"> - : char = 'c'</source>
Attention un caractère n'est composé que d'un caractère sous peine d'obtenir une erreur.
<source lang="ocaml">'cd';; </source>
<source lang="ocaml"> Error: Syntax error
</source>
Les seules exceptions sont les caractères spéciaux (commençant par un antislash '\') tel que '\n' (saut de ligne)
<source lang="ocaml">'\n';; </source>
<source lang="ocaml"> - : char = '\n' </source>
 
=== Les chaînes de caractères (string) ===
 
Maintenant une chaîne de caractère encadré par des guillemets anglais (''double quote'')
<source lang="ocaml"> "chaine";; </source>
<source lang="ocaml"> - : string = "chaine" </source>
 
=== Les booléens (''boolean'') ===
 
Et enfin les booléens : deux valeurs possibles, soit vrai (''true'') soit faux (''false'')
<source lang="ocaml"> true;; </source>
<source lang="ocaml"> - : bool = true </source>
ou
<source lang="ocaml"> false;; </source>
<source lang="ocaml"> - : bool = false </source>
 
== Les opérations simples ==
 
=== sur les entiers ===
L'inférence de type décharge le développeur de la déclaration des différents types. En contrepartie l'utilisation d'opérateurs spécifiques pour chaque type.
Les opérateurs +,-,/,* permettent respectivement d'effectuer les opérations sur l
 
<source lang="ocaml"> 1+2;; </source>
<source lang="ocaml"> - : int = 3 </source>
 
L'ordre des opérateurs est le même que pour les mathématiques '*' et '/' sont prioritaires sur '+' et '-'.
<source lang="ocaml"> 1*2-3+4;; </source>
<source lang="ocaml"> - : int = 3 </source>
 
Mais il reste possible d'utiliser des parenthèse pour changer les priorités.
<source lang="ocaml"> 1*2-(3+4);; </source>
<source lang="ocaml"> - : int = -5 </source>
 
L'utilisation de la division tronque le résultat.
<source lang="ocaml"> 5/2;; </source>
<source lang="ocaml"> - : int = 2 </source>
 
=== sur les réels ===
Les opérateurs pour les réels sont les mêmes que pour les entiers mais suivit d'un point +.,-.*.,/. .
 
<source lang="ocaml"> 1.0 +. 2.0 </source>
<source lang="ocaml"> - : float = 3. </source>
L'addition s'effectue avec l'opérateur '+' pour les entier et '+.' pour les réels.
De même '*.' et '/.' sont prioritaires sur '+.' et '-.'.
<source lang="ocaml"> 1.*.2.-.3.+.4.;; </source>
<source lang="ocaml"> - : float = 3. </source>
 
De même les parenthèse change les priorités.
<source lang="ocaml"> 1.*.2.-.(3.+.4.);; </source>
<source lang="ocaml"> - : float = -5. </source>
 
Mais cette fois la division donne le résultat exacte
<source lang="ocaml"> 5./.2.;; </source>
<source lang="ocaml"> - : float = 2.5 </source>