SlideShare une entreprise Scribd logo
1  sur  2
Télécharger pour lire hors ligne
Mémento CAML
Conventions lexicales
(* Ceci est un commentaire en Caml *)
Constantes
Entiers : 1 + 2 * 3 - 1 = 6 ;
Opérations : x mod y, x / y (et aussi x land y, x lor y, x lxor y, lnot x, x lsl y, x lsr y, x asr y) ;
Conversions : int_of_string, string_of_int, int_of_float .
Flottants : 1.0 +. 2.0 *. 3.0 -. 1.0 = 6.0
Opérations : sin, cos, exp, sqrt, atan, log, …
Conversions : float_of_string, string_of_float, float_of_int
Chaînes : "bonjourn"
Opérations : Concaténation ^, make_string, string_length, sub_string, s.[0], s.[0] <- `a`
Caractères : `a`
Conversions : int_of_char, char_of_int
Booléens : true, false ;
Opérations : &&, ||, not
Rien: type unit, valeur (), argument ou résultat non significatif.
Parenthésage
En Caml, le parenthésage est significatif et suit les règles mathématiques des fonctions trigonométriques.
En Caml, 1 + 2 * x signifie 1 + (2 * x) comme en mathématiques.
En Caml, f x signifie f (x) comme en mathématiques sin x signifie sin (x).
En Caml, f x + g x signifie (f x) + (g x), comme en mathématiques sin x + cos x signifie (sin x) + (cos x).
Donc, f x - y signifie (f x) - y comme en mathématiques sin x - 1 signifie (sin x) - 1.
En Caml, cette convention est généralisée à tous les opérateurs infixes : f x :: g x signifie (f x) :: (g x).
Définition de Valeurs
Globale : let ident = expression;;
Locale : let ident = expression in ...
Multiple : let ... and ident2 = expression2 and ident3 = ...
Récursive: let rec x = ...
Définition de Fonctions
Un argument : let f x = expression ou let f = function x -> expression ;
Plusieurs arguments : let f x y = expression ou let f = fun x y -> expression ;
Avec filtrage : let f = function filtrage ;
Récursive : let rec f x = ... ;
Cas particuliers: une procédure est une fonction sans résultat mathématique significatif, qui rend ().
Fonction anonyme
À un argument: function x -> expression
Avec filtrage sur l'argument:
function
| filtre -> expression
| ...
| filtre -> expression
Avec plusieurs arguments: function x -> function y -> expression
Appel de Fonctions
À l'aide de parenthèses : f(x) ;
Par juxtaposition : f x ;
À plusieurs arguments : f(x)(y) ou f x y ;
Cas particuliers: les fonctions sans argument mathématique significatif prennent () pour argument ;
Par exemple print_newline se déclenche quand on écrit print_newline () ;
Attention: un argument complexe doit toujours être parenthésé ; par exemple f(x + 1) (et non f x + 1 qui signifie f(x) + 1 soit 1 + f(x)).
Précédences des opérateurs
Arithmétiques: comme en mathématiques.
Booléens : comme en mathématiques.
Application de fonction et opérations: comme en mathématiques pour les fonctions trigonométriques.
• Il n'est pas nécessaire de parenthéser une application argument d'une opération (quelque soit l'opération du langage).
• On doit impérativement parenthéser une opération argument d'une fonction.
Filtrage
Un filtrage apparaît après les mots-clefs function, ou with (dans les constructions function filtrage, et aussi try ... with filtrage, ou
encore match ... with filtrage).
Un filtrage est une liste de clauses filtre -> expression: chaque clause est essayée successivement, la première pour laquelle le filtre
correspond à (ou est plus général que) la valeur filtrée est sélectionnée et l'on retourne la valeur de l'expression correspondante.
Attention: un filtrage interne à un autre filtrage doit être entouré de begin end .
On distingue des filtres constants, des variables ou des filtres composés.
| filtre_constant -> expression
| filtre_variable -> expression
| filtre_composé -> expression;;
Filtre constant: les constantes du langage, comme 1, "poi", true, les constructeurs constants.
Filtre variable: les identificateurs ou le caractère _
Filtre composé: un constructeur appliqué à un filtre Constructeur filtre, des listes x::l, des n-uplets (filtre1, filtre2), des enregistrements
{label1=filtre1; ...; labeln=filtren}.
Filtres plus complexes:
• Filtre n-uplet: | (filtre, filtre) -> expression
• Filtre synonyme: | filtre as ident -> expression
• Filtre ou: | filtre_constant | filtre_constant -> expression
• Filtre intervalle: | filtre_caractère .. filtre_caractère -> expression.
• Clause avec garde: | filtre when condition -> expression.
Appel au filtrage
match expression with filtrage
Par exemple:
match f 2 with
| 1 -> expression
| n -> expression
Attention: un filtrage interne à un autre filtrage doit être entouré de begin end:
match e with
| f1 ->
begin match e2 with
| g2 -> ...
...
| gm -> ...
end
| ...
| fn -> expression
Références
Définition: let x = ref 0 in ...
Accès : l'opérateur ! retourne le contenu de la référence argument (! reference) ;
Affectation : l'opérateur := modifie le contenu de la référence en partie gauche (reference := valeur) ; par exemple: x := !x + 1
Vecteurs
Définition : [| 1; 2; 3 |] ou make_vect nombre_d'éléments valeur_initiale ;
Accès : v.(0) ;
Affectation : v.(0) <- nouvelle_valeur ;
Parcours : do_vect, map_vect, for i = 0 to vect_length v - 1 do ... done ;
Fonctions : vect_length, blit_vect
Listes
Définition : [], [ 1; 2; 3 ] ou x :: l ;
Accès:
match l with
| [] -> ...
| x :: l -> ...
Affectation : une liste est immuable.
Parcours : do_list, map ;
Fonctions : list_length
Boucles
for i = 0 to 10 do print_int i done ou for i = 10 downto 0 do print_int i done ;
while !j > 0 do j := !j - 1 done
Séquence
Syntaxe : expression; expression
Attention: une séquence doit être entourée de begin end (ou de ( )) dans les branches d'un if then else.
Conditionnelle
Syntaxe: if condition then expression else expression ;
Opérateurs de comparaison standard : <, >, <=, >=, <> ;
Comparaison physique : ==, != ;
Attention: if condition then begin e1; e2 end else begin e3; e4 end .
Exceptions
Définition d'exceptions : exception Exception_Constante;; ou exception Exception_avec_argument of expression_de_type;;
Rattrapage : try expression with filtrage
Lancement : raise exception_constante ou raise (exception_avec_argument expression)
Entrées-sorties
• Écran (std_out): Impression avec print_string, print_int, print_float, ...,
• Clavier (std_in): lecture avec read_line ;
• Gestion de fichiers:
o en lecture (in_channel): open_in, close_in, input_line, input_string, input_char
o en écriture (out_channel): open_out, close_out, output_string, output_char (données structurées: input_value,
output_value) .
Définition de Types
• Type somme:
type nom =
| Constructeur_constant
| Constructeur_avec_argument of expression_de_type;;
• Type enregistrement:
type nom = {label1 : type_du_champ; label2 : type_du_champ};;
Un champ peut être modifiable: mutable label : type_du_champ_modifiable ;
Affectation d'un champ modifiable: enregistrement.label <- nouvelle_valeur .
• Type abbréviation:
type nom == expression_de_type;;

Contenu connexe

Tendances

Aide mémoire de caml
Aide mémoire de camlAide mémoire de caml
Aide mémoire de caml
zan
 

Tendances (20)

Algorithmique
AlgorithmiqueAlgorithmique
Algorithmique
 
Algorithmique
AlgorithmiqueAlgorithmique
Algorithmique
 
Chapitre1: Langage Python
Chapitre1: Langage PythonChapitre1: Langage Python
Chapitre1: Langage Python
 
Structure de Contrôle
Structure de Contrôle Structure de Contrôle
Structure de Contrôle
 
Cours algorithme: structures répétitives
Cours algorithme: structures répétitivesCours algorithme: structures répétitives
Cours algorithme: structures répétitives
 
Aide mémoire de caml
Aide mémoire de camlAide mémoire de caml
Aide mémoire de caml
 
algorithmique
algorithmiquealgorithmique
algorithmique
 
Introduction a la compilation Analyse Syntaxique - C3
Introduction a la compilation  Analyse Syntaxique - C3Introduction a la compilation  Analyse Syntaxique - C3
Introduction a la compilation Analyse Syntaxique - C3
 
Langage Perl
Langage PerlLangage Perl
Langage Perl
 
cpp1 : Quelques elements de base du C++
cpp1 : Quelques elements de base du C++cpp1 : Quelques elements de base du C++
cpp1 : Quelques elements de base du C++
 
Chapitre6: Surcharge des opérateurs
Chapitre6:  Surcharge des opérateursChapitre6:  Surcharge des opérateurs
Chapitre6: Surcharge des opérateurs
 
Généralités sur la notion d’Algorithme
Généralités sur la notion d’AlgorithmeGénéralités sur la notion d’Algorithme
Généralités sur la notion d’Algorithme
 
Cours langage c
Cours langage cCours langage c
Cours langage c
 
TP C++ : enoncé
TP C++ : enoncéTP C++ : enoncé
TP C++ : enoncé
 
Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019
 
Formation python
Formation pythonFormation python
Formation python
 
Chap2fonctionscpp
Chap2fonctionscppChap2fonctionscpp
Chap2fonctionscpp
 
Chapitre 04 : les fonctions
Chapitre 04 : les fonctionsChapitre 04 : les fonctions
Chapitre 04 : les fonctions
 
Corrigés exercices langage C
Corrigés exercices langage CCorrigés exercices langage C
Corrigés exercices langage C
 
Chapitre5: Classes et objets
Chapitre5: Classes et objetsChapitre5: Classes et objets
Chapitre5: Classes et objets
 

Similaire à Mémento caml

Conception de base_de_l_algorithme
Conception de base_de_l_algorithmeConception de base_de_l_algorithme
Conception de base_de_l_algorithme
mustapha4
 
Mat lab1
Mat lab1Mat lab1
Mat lab1
fouadDD
 

Similaire à Mémento caml (20)

C micro c_1_
C micro c_1_C micro c_1_
C micro c_1_
 
langage C++
langage C++langage C++
langage C++
 
COURS_PYTHON_22.ppt
COURS_PYTHON_22.pptCOURS_PYTHON_22.ppt
COURS_PYTHON_22.ppt
 
Chapitre 2-Concepts de base de l'algorithme-2024.pdf
Chapitre 2-Concepts de base de l'algorithme-2024.pdfChapitre 2-Concepts de base de l'algorithme-2024.pdf
Chapitre 2-Concepts de base de l'algorithme-2024.pdf
 
Kevin Olivier Avignon: Une introduction à la pensée fonctionnelle avec F#
Kevin Olivier Avignon: Une introduction à la pensée fonctionnelle avec F#Kevin Olivier Avignon: Une introduction à la pensée fonctionnelle avec F#
Kevin Olivier Avignon: Une introduction à la pensée fonctionnelle avec F#
 
Programmation Language Python Chapitre 2.pptx
Programmation Language Python Chapitre 2.pptxProgrammation Language Python Chapitre 2.pptx
Programmation Language Python Chapitre 2.pptx
 
Conception de base_de_l_algorithme
Conception de base_de_l_algorithmeConception de base_de_l_algorithme
Conception de base_de_l_algorithme
 
TP5_2020.pdf
TP5_2020.pdfTP5_2020.pdf
TP5_2020.pdf
 
Développement Web- PHP (partie I).pdf
Développement Web- PHP (partie I).pdfDéveloppement Web- PHP (partie I).pdf
Développement Web- PHP (partie I).pdf
 
.php1 : les fondamentaux du PHP
.php1 : les fondamentaux du PHP.php1 : les fondamentaux du PHP
.php1 : les fondamentaux du PHP
 
transparents-Algo-correction.pdf
transparents-Algo-correction.pdftransparents-Algo-correction.pdf
transparents-Algo-correction.pdf
 
Ch4- les structures répétitives.pdf
Ch4- les structures répétitives.pdfCh4- les structures répétitives.pdf
Ch4- les structures répétitives.pdf
 
Programmes et objets informatiques (Prof. Ch. Rapin, Juillet 1989)
Programmes et objets informatiques (Prof. Ch. Rapin, Juillet 1989)Programmes et objets informatiques (Prof. Ch. Rapin, Juillet 1989)
Programmes et objets informatiques (Prof. Ch. Rapin, Juillet 1989)
 
Ch2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdfCh2-Notions de base & actions élémentaires.pdf
Ch2-Notions de base & actions élémentaires.pdf
 
La programmation fonctionnelle avec le langage OCaml
La programmation fonctionnelle avec le langage OCamlLa programmation fonctionnelle avec le langage OCaml
La programmation fonctionnelle avec le langage OCaml
 
Scala : programmation fonctionnelle
Scala : programmation fonctionnelleScala : programmation fonctionnelle
Scala : programmation fonctionnelle
 
Cours de Matlab
Cours de MatlabCours de Matlab
Cours de Matlab
 
Mat lab1
Mat lab1Mat lab1
Mat lab1
 
Theme 7
Theme 7Theme 7
Theme 7
 
syntax-matlab.pdf
syntax-matlab.pdfsyntax-matlab.pdf
syntax-matlab.pdf
 

Plus de zan

Gnu linux advanced administration arabic
Gnu linux advanced administration arabicGnu linux advanced administration arabic
Gnu linux advanced administration arabic
zan
 
Apprendre python3 arab
Apprendre python3 arabApprendre python3 arab
Apprendre python3 arab
zan
 
Scilabisnotnaive
ScilabisnotnaiveScilabisnotnaive
Scilabisnotnaive
zan
 
Guide scilab
Guide scilabGuide scilab
Guide scilab
zan
 
Caml intro
Caml introCaml intro
Caml intro
zan
 
Cours c#
Cours c#Cours c#
Cours c#
zan
 
Fonctionnement d'un reseau
Fonctionnement d'un reseauFonctionnement d'un reseau
Fonctionnement d'un reseau
zan
 
Architecture
ArchitectureArchitecture
Architecture
zan
 
77232345 cours-ip-mobile
77232345 cours-ip-mobile77232345 cours-ip-mobile
77232345 cours-ip-mobile
zan
 
Réseaux
RéseauxRéseaux
Réseaux
zan
 

Plus de zan (13)

Gnu linux advanced administration arabic
Gnu linux advanced administration arabicGnu linux advanced administration arabic
Gnu linux advanced administration arabic
 
Apprendre python3 arab
Apprendre python3 arabApprendre python3 arab
Apprendre python3 arab
 
Scilabisnotnaive
ScilabisnotnaiveScilabisnotnaive
Scilabisnotnaive
 
Guide scilab
Guide scilabGuide scilab
Guide scilab
 
Caml intro
Caml introCaml intro
Caml intro
 
Blue j
Blue jBlue j
Blue j
 
Cours c#
Cours c#Cours c#
Cours c#
 
Fonctionnement d'un reseau
Fonctionnement d'un reseauFonctionnement d'un reseau
Fonctionnement d'un reseau
 
Audit
AuditAudit
Audit
 
Php mysql cours
Php mysql coursPhp mysql cours
Php mysql cours
 
Architecture
ArchitectureArchitecture
Architecture
 
77232345 cours-ip-mobile
77232345 cours-ip-mobile77232345 cours-ip-mobile
77232345 cours-ip-mobile
 
Réseaux
RéseauxRéseaux
Réseaux
 

Mémento caml

  • 1. Mémento CAML Conventions lexicales (* Ceci est un commentaire en Caml *) Constantes Entiers : 1 + 2 * 3 - 1 = 6 ; Opérations : x mod y, x / y (et aussi x land y, x lor y, x lxor y, lnot x, x lsl y, x lsr y, x asr y) ; Conversions : int_of_string, string_of_int, int_of_float . Flottants : 1.0 +. 2.0 *. 3.0 -. 1.0 = 6.0 Opérations : sin, cos, exp, sqrt, atan, log, … Conversions : float_of_string, string_of_float, float_of_int Chaînes : "bonjourn" Opérations : Concaténation ^, make_string, string_length, sub_string, s.[0], s.[0] <- `a` Caractères : `a` Conversions : int_of_char, char_of_int Booléens : true, false ; Opérations : &&, ||, not Rien: type unit, valeur (), argument ou résultat non significatif. Parenthésage En Caml, le parenthésage est significatif et suit les règles mathématiques des fonctions trigonométriques. En Caml, 1 + 2 * x signifie 1 + (2 * x) comme en mathématiques. En Caml, f x signifie f (x) comme en mathématiques sin x signifie sin (x). En Caml, f x + g x signifie (f x) + (g x), comme en mathématiques sin x + cos x signifie (sin x) + (cos x). Donc, f x - y signifie (f x) - y comme en mathématiques sin x - 1 signifie (sin x) - 1. En Caml, cette convention est généralisée à tous les opérateurs infixes : f x :: g x signifie (f x) :: (g x). Définition de Valeurs Globale : let ident = expression;; Locale : let ident = expression in ... Multiple : let ... and ident2 = expression2 and ident3 = ... Récursive: let rec x = ... Définition de Fonctions Un argument : let f x = expression ou let f = function x -> expression ; Plusieurs arguments : let f x y = expression ou let f = fun x y -> expression ; Avec filtrage : let f = function filtrage ; Récursive : let rec f x = ... ; Cas particuliers: une procédure est une fonction sans résultat mathématique significatif, qui rend (). Fonction anonyme À un argument: function x -> expression Avec filtrage sur l'argument: function | filtre -> expression | ... | filtre -> expression Avec plusieurs arguments: function x -> function y -> expression Appel de Fonctions À l'aide de parenthèses : f(x) ; Par juxtaposition : f x ; À plusieurs arguments : f(x)(y) ou f x y ; Cas particuliers: les fonctions sans argument mathématique significatif prennent () pour argument ; Par exemple print_newline se déclenche quand on écrit print_newline () ; Attention: un argument complexe doit toujours être parenthésé ; par exemple f(x + 1) (et non f x + 1 qui signifie f(x) + 1 soit 1 + f(x)). Précédences des opérateurs Arithmétiques: comme en mathématiques. Booléens : comme en mathématiques. Application de fonction et opérations: comme en mathématiques pour les fonctions trigonométriques. • Il n'est pas nécessaire de parenthéser une application argument d'une opération (quelque soit l'opération du langage). • On doit impérativement parenthéser une opération argument d'une fonction. Filtrage Un filtrage apparaît après les mots-clefs function, ou with (dans les constructions function filtrage, et aussi try ... with filtrage, ou encore match ... with filtrage). Un filtrage est une liste de clauses filtre -> expression: chaque clause est essayée successivement, la première pour laquelle le filtre correspond à (ou est plus général que) la valeur filtrée est sélectionnée et l'on retourne la valeur de l'expression correspondante. Attention: un filtrage interne à un autre filtrage doit être entouré de begin end . On distingue des filtres constants, des variables ou des filtres composés. | filtre_constant -> expression | filtre_variable -> expression | filtre_composé -> expression;; Filtre constant: les constantes du langage, comme 1, "poi", true, les constructeurs constants. Filtre variable: les identificateurs ou le caractère _ Filtre composé: un constructeur appliqué à un filtre Constructeur filtre, des listes x::l, des n-uplets (filtre1, filtre2), des enregistrements {label1=filtre1; ...; labeln=filtren}. Filtres plus complexes: • Filtre n-uplet: | (filtre, filtre) -> expression • Filtre synonyme: | filtre as ident -> expression
  • 2. • Filtre ou: | filtre_constant | filtre_constant -> expression • Filtre intervalle: | filtre_caractère .. filtre_caractère -> expression. • Clause avec garde: | filtre when condition -> expression. Appel au filtrage match expression with filtrage Par exemple: match f 2 with | 1 -> expression | n -> expression Attention: un filtrage interne à un autre filtrage doit être entouré de begin end: match e with | f1 -> begin match e2 with | g2 -> ... ... | gm -> ... end | ... | fn -> expression Références Définition: let x = ref 0 in ... Accès : l'opérateur ! retourne le contenu de la référence argument (! reference) ; Affectation : l'opérateur := modifie le contenu de la référence en partie gauche (reference := valeur) ; par exemple: x := !x + 1 Vecteurs Définition : [| 1; 2; 3 |] ou make_vect nombre_d'éléments valeur_initiale ; Accès : v.(0) ; Affectation : v.(0) <- nouvelle_valeur ; Parcours : do_vect, map_vect, for i = 0 to vect_length v - 1 do ... done ; Fonctions : vect_length, blit_vect Listes Définition : [], [ 1; 2; 3 ] ou x :: l ; Accès: match l with | [] -> ... | x :: l -> ... Affectation : une liste est immuable. Parcours : do_list, map ; Fonctions : list_length Boucles for i = 0 to 10 do print_int i done ou for i = 10 downto 0 do print_int i done ; while !j > 0 do j := !j - 1 done Séquence Syntaxe : expression; expression Attention: une séquence doit être entourée de begin end (ou de ( )) dans les branches d'un if then else. Conditionnelle Syntaxe: if condition then expression else expression ; Opérateurs de comparaison standard : <, >, <=, >=, <> ; Comparaison physique : ==, != ; Attention: if condition then begin e1; e2 end else begin e3; e4 end . Exceptions Définition d'exceptions : exception Exception_Constante;; ou exception Exception_avec_argument of expression_de_type;; Rattrapage : try expression with filtrage Lancement : raise exception_constante ou raise (exception_avec_argument expression) Entrées-sorties • Écran (std_out): Impression avec print_string, print_int, print_float, ..., • Clavier (std_in): lecture avec read_line ; • Gestion de fichiers: o en lecture (in_channel): open_in, close_in, input_line, input_string, input_char o en écriture (out_channel): open_out, close_out, output_string, output_char (données structurées: input_value, output_value) . Définition de Types • Type somme: type nom = | Constructeur_constant | Constructeur_avec_argument of expression_de_type;; • Type enregistrement: type nom = {label1 : type_du_champ; label2 : type_du_champ};; Un champ peut être modifiable: mutable label : type_du_champ_modifiable ; Affectation d'un champ modifiable: enregistrement.label <- nouvelle_valeur . • Type abbréviation: type nom == expression_de_type;;