UE D - Programmation fonctionnelle Chapitre 2 Bases du CAML Université Blaise Pascal Plan ● Caractéristiques de Caml ● Bases de la programmation Caml ● Types de base ● Définition de constantes ● Expressions conditionnelles Université Blaise Pascal 1. Caractéristiques de Caml ● ● Caml = Categorical Abstract Machine Language, 1985 – développé en France par l'Inria – Lisp = List Processing, 1960 – ML = Meta Language, 1980 Origine du nom – CAM : machine abstraite permettant de définir et d'exécuter des fonctions – ML : langage fonctionnel, avec inférence de types et filtrage Université Blaise Pascal 1. Caractéristiques de Caml ● Langage – ● Fonctionnel – ● ensemble de règles de syntaxe et de sémantique basé sur la notion de fonctions (plutôt que sur la notion d'instructions) À évaluation stricte – les paramètres d'une fonction sont évalués avant l'appel de la fonction – exemple : pour calculer f(3+2), on calcule d'abord 3+2, puis f(3+2) Université Blaise Pascal 1. Caractéristiques de Caml ● ● Fortement typé – les types sont vérifiés pour éviter les ambiguités – par exemple, quand on ajoute deux nombres, on doit savoir si ces nombres sont des entiers ou des réels À inférence de types – les types sont déduits Université Blaise Pascal 1. Caractéristiques de Caml ● Exemples de programmes réalisés en Caml – MLDonkey : logiciel de téléchargement pair à pair – Coq : assistant de preuves – Astrée : analyseur permettant d'éviter les erreurs d'exécution – FFTW : librairie C permettant de faire des transformées de Fourier, utilisant un optimiseur réalisé en Caml Université Blaise Pascal 2. Bases de la programmation Caml ● Cycle de la programmation ● En pratique Université Blaise Pascal 2.1 Cycle de la programmation réflexion Algorithme éd o iti éd n itio n Problème Code source Tests Programme test compilation exécution interprétation Code source s co co t e n c st l ua s n ts ants nclu Tests Université Blaise Pascal Solution 2.1 Cycle de la programmation ● ● Deux méthodes – interprétation – compilation / exécution Interprétation – avantages : cycle de programmation plus court, un seul outil (l'interpréteur) pour éditer et exécuter – inconvénients : nécessite la présence d'un interpréteur sur la machine, exécution peu efficace – conclusion : utile pour la conception du programme, mais pas pour sa diffusion Université Blaise Pascal 2.1 Cycle de la programmation ● Compilation / exécution – avantages : exécution efficace – inconvénients : cycle de programmation plus long, nécessite l'utilisation de plusieurs outils (un éditeur de textes, un compilateur, un exécuteur) – conclusion : utile pour la diffusion du programme, mais pas pour sa conception Université Blaise Pascal 2.2 En pratique ● Dans cette UE : méthode par interprétation ● Exemple de session – lancement d'un terminal user: ~$ ocaml – # 1+1;; – ­ : int = 2 – # exit(0);; – user: ~$ exit – Université Blaise Pascal 2.2 En pratique ● ● À noter de manière générale – invite du terminal / invite de l'interpréteur – fonctionnement interactif de type question/réponse (à la fois du terminal et de l'interpréteur) À noter concernant la syntaxe Caml – les commandes terminent par ;; – l'interpréteur a calculé le résultat de 1+1 – exit(0);; ressemble à l'appel d'une fonction mathématique appelée exit avec le paramètre 0 Université Blaise Pascal 2.2 En pratique ● Commentaires – ignorés par l'interpréteur – commencent avec (* – finissent avec *) – peuvent être imbriqués Université Blaise Pascal 3. Types de base ● ● Type – ensemble de valeurs – ensemble d'opérations sur ces valeurs Type entier = int – sous-ensemble des entiers – valeurs : 0, 1, 2, ­7, 14, ... – opérations : +, ­, *, /, mod, float_of_int, char_of_int, ... Université Blaise Pascal 3. Types de base ● Type réel = float – sous-ensemble des réels – valeurs : 3.14, 2.0, ­9.99, ... – opérations : +., ­., *., /., cos, sin, tan, acos, int_of_float, ... Université Blaise Pascal 3. Types de base ● Type caractère = char – ensemble des caractères – valeurs : 'a', 'b', 'A', '0', '1', ' ', '\n', ... – opérations : int_of_char, ... – ASCII Université Blaise Pascal 3. Types de base ● Type chaîne de caractères = string – ensemble des chaînes de caractères (= textes) – valeurs : "bonjour", "Le chameau", "123", "", ... – opération : ^ (concaténation), .[n] (extraction du n-ème caractère de la chaîne) Université Blaise Pascal 3. Types de base ● ● Type binaire (booléen) = bool – ensemble de deux valeurs – valeurs : true, false – opérations : not, &&, || Type unaire = unit – ensemble d'une valeur – valeur : () – opération : aucune Université Blaise Pascal 3. Types de base ● Rappel : Caml fait de l'inférence de types – ● Caml découvre lui-même le type en fonction des valeurs et des opérations utilisées Exemple : – # 1+1;; – ­ : int = 2 Université Blaise Pascal 3. Types de base ● Rappel : Caml est fortement typé – ● Caml nécessite que les valeurs et les opérations utilisées concernent le même type Exemple : – # 1+3.14;; – This expression has type float but is here used with type int – # 1+.3.14;; – This expression has type int but is here used with type int Université Blaise Pascal 4. Définitions de constantes ● Définitions simples ● Définitions parallèles ● Définitions imbriquées Université Blaise Pascal 4.1 Définitions simples ● ● Constante – nom – valeur – type (inféré par Caml) Exemple en mathématique : – soit pi = 3.14 – posons x = 12 Université Blaise Pascal 4.1 Définitions simples ● Syntaxe : – ● let identificateur = valeur;; Exemple : – # let pi = 3.14;; – val pi : float = 3.14 – # let x = 12;; – val x : int = 12 Université Blaise Pascal 4.1 Définitions simples ● Identificateurs = nom de la constante – commence par une lettre minuscule – composé de lettres (minuscules ou majuscules), de chiffres, ou du caractère _ Université Blaise Pascal 4.2 Définitions parallèles ● Syntaxe : – ● ● let id1 = val1 and id2 = val2;; Exemple : – # let a = 1 and b = 2;; – val a : int = 1 – val b : int = 2 La définition des variables se fait en parallèle (sans ordre) Université Blaise Pascal 4.3 Définitions imbriquées ● Syntaxe : – ● let id1 = val1 in id2 = val2;; Exemple : – # let r = 10. and pi = 3.14 in pi*.r*.r;; – ­ : float = 314. Université Blaise Pascal 4.3 Définitions imbriquées ● Exemple de multiples définitions imbriquées : – # let x=10 in let x=10+x in let x=20+x in 30+x;; – ­ : int = 70 – # let x=10 in let x=20 and y=x in x+y;; – ­ : int = 30 Université Blaise Pascal 5. Expressions conditionnelles ● Syntaxe : – ● ● if expr1 then expr2 else expr3;; Remarque : – expr1 doit être de type booléen – expr2 et expr3 doivent être de même type Exemple – # if cos(3.14/.2.)<sin(3.14/.5.) then true else false; – ­ : int = 1 Université Blaise Pascal