Premiers pas en OCaml/Types primitifs

Leçons de niveau 14
Une page de Wikiversité, la communauté pédagogique libre.
Début de la boite de navigation du chapitre
Types primitifs
Icône de la faculté
Chapitre no 3
Leçon : Premiers pas en OCaml
Chap. préc. :Premier programme
Chap. suiv. :Opérations arithmétiques
fin de la boite de navigation du chapitre
En raison de limitations techniques, la typographie souhaitable du titre, « Premiers pas en OCaml : Types primitifs
Premiers pas en OCaml/Types primitifs
 », n'a pu être restituée correctement ci-dessus.

Pour vous familiariser avec OCaml je vous conseille de tester par vous-même tous les exemples de code qui vous seront présentés au cours de cette leçon. Et le plus simple pour le moment est d’utiliser l'interpréteur. Tapez ocaml dans votre invite de commande.

ocaml

Vous devriez voir apparaître le prompt d'OCaml :

        OCaml version 4.01.0

#

Vous êtes désormais parés pour tester tous les exemple données.

Préambule[modifier | modifier le wikicode]

OCaml est statiquement typé. Pourtant le type n'a, la plupart du temps, pas besoin d’être écrit explicitement. C'est l'un des points forts de OCaml. Il utilise l’ inférence de type pour déterminer à la compilation le type d'une expression. Voyons quelques exemples de type qu'OCaml est capable de reconnaître.

Les entiers (Integer)[modifier | modifier le wikicode]

Les entiers sont uniquement composé de chiffres et éventuellement d'un moins (-) devant s'il est signé (négatif).

Les décimaux[modifier | modifier le wikicode]

Les décimaux sont des nombres écrit en base 10. C'est-à-dire qu’ils sont uniquement composés des chiffres de 0 à 9.

Sous la boucle d'interaction tapez 1 ;; à la suite de l'invite # :

# 1 ;;

La boucle d'intéraction interprète alors le résultat et affiche le type de l’expression :

- : int = 1

Il indique que l’expression est de type int et que sa valeur est 1.

Un entier peut être négatif :

# -10 ;;

- : int = -10

Les hexadécimaux[modifier | modifier le wikicode]

La notation hexadécimale consiste à écrire les nombres en base 16. C'est-à-dire qu’ils sont composés des chiffres de 0 à 9 et des lettres de A à F. Vous pouvez les utiliser grâce au préfixe 0x (0X). La boucle interactive affichera en retours sa valeur écrite en décimal :

# 0xABC;;

- : int = 2748

Les octaux[modifier | modifier le wikicode]

Les octaux sont des nombres écrit en base 8. C'est-à-dire qu’ils sont uniquement composés des chiffres de 0 à 7. Vous pouvez les utiliser grâce au préfixe 0o (0O).

# 0o123;;

- : int = 83

Les binaires[modifier | modifier le wikicode]

Les binaires sont des nombres écrit en base 2. C'est-à-dire qu’ils sont uniquement composés des chiffres 0 et 1. Vous pouvez les utiliser grâce au préfixe 0b (0B) :

# 0b00101010 ;;

- : int = 42

Représentation[modifier | modifier le wikicode]

En OCaml la représentation des entiers dépend de l'architecture de l'ordinateur :

Architecture Bits utiles Plage de représentation
32 bits 31
64 bits 63

Vous pouvez vérifier grâce aux fonctions min_int et max_int.

# min_int;;
- : int = -1073741824

# max_int;;
- : int = 1073741823
Panneau d’avertissement Les entiers hors des ces bornes provoquent une erreur.

Le bit restant permet à l'implémentation de faire rapidement la différence entre un entier et un pointeur.

La seule exception à cette règle est le premier entier après la borne supérieur : 1073741824 qui est prend automatiquement sa valeur opposé -1073741824.

# 1073741824;;
- : int = -1073741824

# 1073741825;;
 Error: Integer literal exceeds the range of representable integers of type int

Les réels/virgules flottantes (float)[modifier | modifier le wikicode]

Les réels sont écrits en utilisant un point (.) (notation anglaise, et non pas d'une virgule comme en français).

# 1.0 ;;
(* ou encore *)
# 1. ;;

 - : float = 1.

Représentation[modifier | modifier le wikicode]

Les réels en OCaml utilisent une double précisions. Ils sont codés sur 64 bits (8 octets) selon le standard IEEE754 et leurs plages de représentations est de
.
Vous pouvez le vérifier grâce à la fonction max_float.

# max_float;;

- : float = 1.7976931348623157e+308
Intervalle Précision des réels

Vous pouvez le vérifier grâce aux fonctions min_float et epsilon_float.

# min_float;;
- : float = 2.2250738585072014e-308

# epsilon_float;;
- : float = 2.2204460492503131e-016

Les caractères (character)[modifier | modifier le wikicode]

Les caractères sont encadrés par des apostrophes ( ' ) (simple quote)

# 'c' ;;
 - : char = 'c'
Panneau d’avertissement Un caractère n'en est pas deux ! Le code suivant provoque une erreur :
# 'cd' ;; 
Error: Syntax error


Panneau d’avertissement Un caractère accentué peut utiliser plusieurs octets suivant l'encodage utilisé par l'éditeur de texte et/ou le terminal :
# 'é' ;;
Characters 0-1:
  'é' ;;
  ^
Error: Syntax error
# String.length "é" ;;
- : int = 2

À noter que certains caractères spéciaux se notent en commençant par un antislash '\' :

Séquence ASCII Anglais Français
\\ \ Backslash Antislash
\" " Double quote Guillement
\’ ' single quote Apostrophe
\n LF Linefeed Saut de ligne
\r CR Carriage return Retour chariot
\t TAB Horizontal tabulation Tabulation
\b BS Backspace Retour arrière
\space SPC Space Espace
\ddd ddd Le caractère ASCII qui a pour code décimal ddd
\xhh xhh Le caractère ASCII qui a pour code hexadécimal hh
# '\n' ;;
 - : char = '\n'

# '\097' ;;
- : char = 'a'

# '\x20' ;;
- : char = ' '

Les chaînes de caractères (string)[modifier | modifier le wikicode]

Les chaîne de caractères sont encadrés par des guillemets ( " ) (double quote)

# "chaine";;

- : string = "chaine"

Les booléens (boolean)[modifier | modifier le wikicode]

Les booléens : deux valeurs possibles, soit vrai (true) soit faux (false) :

# true ;;
 - : bool = true

# false ;;
 - : bool = false

Le type unité (unit)[modifier | modifier le wikicode]

Et enfin le type unité n'a qu'une seule valeur : () :

# () ;;

- : unit = ()


Tableau récapitulatif[modifier | modifier le wikicode]

Voir la fiche de synthèse.

Références[modifier | modifier le wikicode]

Toutes ces informations sont disponibles sur la documentation officielle :

  • Document au format H T M L[html]le document est sous une licence copyright[licence Copyright](en)lien vers le document • Règles de nommages
  • Document au format H T M L[html]le document est sous une licence copyright[licence Copyright](en)lien vers le document • Fonctions sur les types primitifs
  • Document au format H T M L[html]le document est sous une licence copyright[licence Copyright](en)lien vers le document • Représentation interne des chaînes de caractères