Version sans JavaScript, en lecture seule : les ateliers, les quiz et l’exécution du code n’y sont pas. Version complète · Catalogue · Se connecter
Support de cours · chapitre 2
Bases de Caml
Définitions, types de base, expressions et premières fonctions prédéfinies.
Généralités de Caml
Principes
Présentation de Caml
Caml est un langage simple :
- peu d'instructions ;
- des constructions générales ;
- des notations intuitives.
On l'utilise ici dans son interprète (la « boucle interactive », qu'on lance avec la commande ocaml). On tape une expression, terminée par ;;. Caml la lit, calcule son type, l'évalue, puis affiche le type et la valeur.
Dans ce cours, l'interprète tourne dans la page : chaque cadre de code est une cellule qu'il exécute, et sa réponse s'affiche sous chaque phrase. Modifiez le code, puis cliquez sur Run pour relancer. Les cellules d'une page partagent leurs définitions, du haut vers le bas.
1 + 2 ;;
"Caml" ;;Dans la réponse, le - signifie que la valeur n'a pas de nom. Dans l'interprète ocaml, sur votre machine, on tape les mêmes phrases après l'invite #, et les réponses sont les mêmes.
Si l'expression est mal typée, Caml refuse de l'évaluer :
1 + "deux" ;;Toutes les valeurs sont typées ! Et le type est vérifié avant l'exécution : une erreur de type ne peut pas arriver pendant que le programme tourne.
Définitions
Comment réutiliser une valeur en Caml ? Par les définitions. Le mot-clé à utiliser est let.
Définition globale : le nom est utilisable dans toute la suite.
let x = 3 * 4 ;;
x + 1 ;;Définition locale : let … in … donne un nom le temps d'une seule expression.
let y = 2 in x + y ;;
y ;;Définitions multiples : plusieurs noms à la fois, reliés par and.
let a = 1 and b = 2 ;;Les types de Caml
Nombres
Il existe deux formats de nombres :
- les entiers (
int) :-,+,*,/(division entière) etmod(reste) ; demin_intàmax_int; - les flottants (
float), attention au.:-.,+.,*.et/..
7 / 2 ;;
7 mod 2 ;;
max_int ;;
max_int + 1 ;;
1.5 +. 2.25 ;;Le calcul sur les entiers « boucle » : au-delà de max_int, on repart de min_int, sans erreur.
Les opérateurs des flottants sont différents de ceux des entiers, et Caml ne convertit jamais tout seul :
1 + 2.5 ;;
1.0 + 2.0 ;;
float_of_int 3 +. 0.5 ;;Valeurs booléennes
Le type bool correspond aux valeurs de vérité, true et false.
a | b | not a | a || b | a && b |
|---|---|---|---|---|
false | false | true | false | false |
false | true | true | true | false |
true | false | false | true | false |
true | true | false | true | true |
not true ;;
true && false ;;1 < 2 || 1 / 0 = 0 ;;
1 > 2 && 1 / 0 = 0 ;;Dans les deux cas, 1 / 0 n'est jamais calculé : la réponse est connue dès la partie gauche.
Caractères et chaînes
'a'est un caractère (typechar), représenté par un entier sur 8 bits (son code)."bonjour"est une chaîne de caractères (typestring).- Opérateurs :
^pour la concaténation,.[i]pour le caractère d'indicei(on compte à partir de 0).
'a' ;;
"bon" ^ "jour" ;;
"bonjour".[3] ;;
String.length "bonjour" ;;
int_of_char 'A' ;;Opérateurs de comparaison
Ce sont les opérateurs qui testent :
- l'égalité :
=; - l'inégalité :
<>; - les relations d'ordre :
>,<,<=et>=.
Particularités :
- ces opérateurs sont les seuls à pouvoir être utilisés sur plusieurs types : ils sont polymorphes ;
- les deux valeurs comparées doivent cependant être du même type ;
- ils sont plus prioritaires que les opérateurs logiques : aucune parenthèse n'est nécessaire (mais elles sont fortement recommandées).
1 < 2 ;;
"abc" < "abd" ;;
'a' = 'b' ;;
1 <> 2 ;;
1 = 1.0 ;;Les chaînes se comparent dans l'ordre du dictionnaire (plus exactement, l'ordre des codes des caractères).