SlideShare une entreprise Scribd logo
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

Algorithmique
AlgorithmiqueAlgorithmique
Algorithmique
ABID Mehdi
 
Algorithmique
AlgorithmiqueAlgorithmique
Algorithmique
ABID Mehdi
 
Chapitre1: Langage Python
Chapitre1: Langage PythonChapitre1: Langage Python
Chapitre1: Langage Python
Aziz Darouichi
 
Structure de Contrôle
Structure de Contrôle Structure de Contrôle
Structure de Contrôle
InforMatica34
 
Cours algorithme: structures répétitives
Cours algorithme: structures répétitivesCours algorithme: structures répétitives
Cours algorithme: structures répétitives
InforMatica34
 
Aide mémoire de caml
Aide mémoire de camlAide mémoire de caml
Aide mémoire de caml
zan
 
algorithmique
algorithmiquealgorithmique
algorithmique
ABID Mehdi
 
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
Beligh HAMDI
 
Langage Perl
Langage PerlLangage Perl
Langage Perl
Rached Krim
 
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++
Abdoulaye Dieng
 
Chapitre6: Surcharge des opérateurs
Chapitre6:  Surcharge des opérateursChapitre6:  Surcharge des opérateurs
Chapitre6: Surcharge des opérateurs
Aziz Darouichi
 
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
InforMatica34
 
Cours langage c
Cours langage cCours langage c
Cours langage c
coursuniv
 
TP C++ : enoncé
TP C++ : enoncéTP C++ : enoncé
Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019Chapitre2fonctionscppv2019
Chapitre2fonctionscppv2019
Aziz Darouichi
 
Chap2fonctionscpp
Chap2fonctionscppChap2fonctionscpp
Chap2fonctionscpp
Aziz Darouichi
 
Chapitre 04 : les fonctions
Chapitre 04 : les fonctionsChapitre 04 : les fonctions
Chapitre 04 : les fonctions
L’Université Hassan 1er Settat
 
Corrigés exercices langage C
Corrigés exercices langage CCorrigés exercices langage C
Corrigés exercices langage C
coursuniv
 
Chapitre5: Classes et objets
Chapitre5: Classes et objetsChapitre5: Classes et objets
Chapitre5: Classes et objets
Aziz Darouichi
 

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

C micro c_1_
C micro c_1_C micro c_1_
C micro c_1_
laidens
 
langage C++
langage C++langage C++
langage C++
mohamednacim
 
COURS_PYTHON_22.ppt
COURS_PYTHON_22.pptCOURS_PYTHON_22.ppt
COURS_PYTHON_22.ppt
IbtissameAbbad1
 
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
AdjimbawNDIAYE
 
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#
MSDEVMTL
 
Programmation Language Python Chapitre 2.pptx
Programmation Language Python Chapitre 2.pptxProgrammation Language Python Chapitre 2.pptx
Programmation Language Python Chapitre 2.pptx
AhmathBambaMBACKE
 
Conception de base_de_l_algorithme
Conception de base_de_l_algorithmeConception de base_de_l_algorithme
Conception de base_de_l_algorithmemustapha4
 
cour informatique niveau3 programmation en Python.pdf
cour informatique niveau3 programmation en  Python.pdfcour informatique niveau3 programmation en  Python.pdf
cour informatique niveau3 programmation en Python.pdf
Nanchi6
 
TP5_2020.pdf
TP5_2020.pdfTP5_2020.pdf
TP5_2020.pdf
mouradlamraoui1
 
Cours_Java. Skzozibb nsif keizijfbjzozzml keiei tjeiz9rkr
Cours_Java. Skzozibb nsif keizijfbjzozzml keiei tjeiz9rkrCours_Java. Skzozibb nsif keizijfbjzozzml keiei tjeiz9rkr
Cours_Java. Skzozibb nsif keizijfbjzozzml keiei tjeiz9rkr
JulienKhalil3
 
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
YasushiTsubakik
 
.php1 : les fondamentaux du PHP
.php1 : les fondamentaux du PHP.php1 : les fondamentaux du PHP
.php1 : les fondamentaux du PHP
Abdoulaye Dieng
 
transparents-Algo-correction.pdf
transparents-Algo-correction.pdftransparents-Algo-correction.pdf
transparents-Algo-correction.pdf
abdallahyoubiidrissi1
 
Algorithmique&Langage C-Partie1 BTS.pptx
Algorithmique&Langage C-Partie1 BTS.pptxAlgorithmique&Langage C-Partie1 BTS.pptx
Algorithmique&Langage C-Partie1 BTS.pptx
Facebokma
 
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
FadouaBouafifSamoud
 
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)
ebruchez
 
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
FadouaBouafifSamoud
 
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
Stéphane Legrand
 
Scala : programmation fonctionnelle
Scala : programmation fonctionnelleScala : programmation fonctionnelle
Scala : programmation fonctionnelle
MICHRAFY MUSTAFA
 
Cours de Matlab
Cours de MatlabCours de Matlab

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
 
cour informatique niveau3 programmation en Python.pdf
cour informatique niveau3 programmation en  Python.pdfcour informatique niveau3 programmation en  Python.pdf
cour informatique niveau3 programmation en Python.pdf
 
TP5_2020.pdf
TP5_2020.pdfTP5_2020.pdf
TP5_2020.pdf
 
Cours_Java. Skzozibb nsif keizijfbjzozzml keiei tjeiz9rkr
Cours_Java. Skzozibb nsif keizijfbjzozzml keiei tjeiz9rkrCours_Java. Skzozibb nsif keizijfbjzozzml keiei tjeiz9rkr
Cours_Java. Skzozibb nsif keizijfbjzozzml keiei tjeiz9rkr
 
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
 
Algorithmique&Langage C-Partie1 BTS.pptx
Algorithmique&Langage C-Partie1 BTS.pptxAlgorithmique&Langage C-Partie1 BTS.pptx
Algorithmique&Langage C-Partie1 BTS.pptx
 
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
 

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
 
Blue j
Blue jBlue j
Blue j
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
 
Audit
AuditAudit
Audit
zan
 
Php mysql cours
Php mysql coursPhp mysql cours
Php mysql cours
zan
 
Architecture
ArchitectureArchitecture
Architecturezan
 
77232345 cours-ip-mobile
77232345 cours-ip-mobile77232345 cours-ip-mobile
77232345 cours-ip-mobile
zan
 
Réseaux
RéseauxRéseaux
Réseauxzan
 

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
 

Dernier

Alternative au 3eme lien et complement au Tramway de la ville de Quebec Rev 1...
Alternative au 3eme lien et complement au Tramway de la ville de Quebec Rev 1...Alternative au 3eme lien et complement au Tramway de la ville de Quebec Rev 1...
Alternative au 3eme lien et complement au Tramway de la ville de Quebec Rev 1...
Daniel Bedard
 
PFE ABDOUS BERRI 2024, RAPPORT COMPLET RETA FINAL.pdf
PFE ABDOUS BERRI 2024, RAPPORT COMPLET RETA FINAL.pdfPFE ABDOUS BERRI 2024, RAPPORT COMPLET RETA FINAL.pdf
PFE ABDOUS BERRI 2024, RAPPORT COMPLET RETA FINAL.pdf
iheberry
 
Alternative - Complément au Tramway et 3 ème lien de la ville de Quebec (PDF)
Alternative - Complément au Tramway  et 3 ème lien de la ville de Quebec (PDF)Alternative - Complément au Tramway  et 3 ème lien de la ville de Quebec (PDF)
Alternative - Complément au Tramway et 3 ème lien de la ville de Quebec (PDF)
Daniel Bedard
 
SRE - Mythes et Réalités - Voxxed 2024.pdf
SRE - Mythes et Réalités - Voxxed 2024.pdfSRE - Mythes et Réalités - Voxxed 2024.pdf
SRE - Mythes et Réalités - Voxxed 2024.pdf
Henri Gomez
 
Rénovation des prairies sans labour est-ce possible en bio.pdf
Rénovation des prairies sans labour est-ce possible en bio.pdfRénovation des prairies sans labour est-ce possible en bio.pdf
Rénovation des prairies sans labour est-ce possible en bio.pdf
idelewebmestre
 
PFE MASTER en Développement d’une Application E-commerce avec la Technologie ...
PFE MASTER en Développement d’une Application E-commerce avec la Technologie ...PFE MASTER en Développement d’une Application E-commerce avec la Technologie ...
PFE MASTER en Développement d’une Application E-commerce avec la Technologie ...
ayoub_anbara96
 
Note Agro-climatique et prairies n°4 - Juin 2024
Note Agro-climatique et prairies n°4 - Juin 2024Note Agro-climatique et prairies n°4 - Juin 2024
Note Agro-climatique et prairies n°4 - Juin 2024
idelewebmestre
 
S210-S-27.04-chaudiere-à-vapeur bilan thermique
S210-S-27.04-chaudiere-à-vapeur bilan thermiqueS210-S-27.04-chaudiere-à-vapeur bilan thermique
S210-S-27.04-chaudiere-à-vapeur bilan thermique
ALIIAE
 

Dernier (8)

Alternative au 3eme lien et complement au Tramway de la ville de Quebec Rev 1...
Alternative au 3eme lien et complement au Tramway de la ville de Quebec Rev 1...Alternative au 3eme lien et complement au Tramway de la ville de Quebec Rev 1...
Alternative au 3eme lien et complement au Tramway de la ville de Quebec Rev 1...
 
PFE ABDOUS BERRI 2024, RAPPORT COMPLET RETA FINAL.pdf
PFE ABDOUS BERRI 2024, RAPPORT COMPLET RETA FINAL.pdfPFE ABDOUS BERRI 2024, RAPPORT COMPLET RETA FINAL.pdf
PFE ABDOUS BERRI 2024, RAPPORT COMPLET RETA FINAL.pdf
 
Alternative - Complément au Tramway et 3 ème lien de la ville de Quebec (PDF)
Alternative - Complément au Tramway  et 3 ème lien de la ville de Quebec (PDF)Alternative - Complément au Tramway  et 3 ème lien de la ville de Quebec (PDF)
Alternative - Complément au Tramway et 3 ème lien de la ville de Quebec (PDF)
 
SRE - Mythes et Réalités - Voxxed 2024.pdf
SRE - Mythes et Réalités - Voxxed 2024.pdfSRE - Mythes et Réalités - Voxxed 2024.pdf
SRE - Mythes et Réalités - Voxxed 2024.pdf
 
Rénovation des prairies sans labour est-ce possible en bio.pdf
Rénovation des prairies sans labour est-ce possible en bio.pdfRénovation des prairies sans labour est-ce possible en bio.pdf
Rénovation des prairies sans labour est-ce possible en bio.pdf
 
PFE MASTER en Développement d’une Application E-commerce avec la Technologie ...
PFE MASTER en Développement d’une Application E-commerce avec la Technologie ...PFE MASTER en Développement d’une Application E-commerce avec la Technologie ...
PFE MASTER en Développement d’une Application E-commerce avec la Technologie ...
 
Note Agro-climatique et prairies n°4 - Juin 2024
Note Agro-climatique et prairies n°4 - Juin 2024Note Agro-climatique et prairies n°4 - Juin 2024
Note Agro-climatique et prairies n°4 - Juin 2024
 
S210-S-27.04-chaudiere-à-vapeur bilan thermique
S210-S-27.04-chaudiere-à-vapeur bilan thermiqueS210-S-27.04-chaudiere-à-vapeur bilan thermique
S210-S-27.04-chaudiere-à-vapeur bilan thermique
 

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;;