Académique Documents
Professionnel Documents
Culture Documents
Objectif du cours: rchir aux principes de base de la programmation et de linformatique travers lapprentissage dun langage simple mais puissant. Diffrence entre programmation (concept abstrait) et programmation sur machine (ralisation particulire dun processus de conception). relative indpendance du langage vis vis des problmes de programmation le choix du langage tient deux choses: puissance dexpression pour rsoudre des problmes complexes et
La programmation fonctionnelle ?
concept fondamental: labstraction traiter une chose complexe en la divisant en choses plus simples et en ignorant les dtails. objets de base : la fonction un programme est un ensemble de fonctions traitant des donnes dentre langages compils : instructions / prparation (compilation) / execution avantage/ inconvnients valuation / dbuggage plus souple plus lent (mais on peut toujours compiler) le langage choisi : Camel la programmation fonctionnelle est une famille de langage trs proches, dont le plus clbre est LISP dvelopp au MIT. le successeur de LISP: scheme: plus lger, plus simple et aussi puissant, utilis pour lducation mais pas de typage des donnes; on utilisera donc un autre langage fonctionnel typ: Camel
2
machine
A retenir
processus de calcul : tres abstraits mis en uvre dans les ordinateurs ; donnes : ou information, objets manipuls par les processus ; programme : contrle volution des processus ; langage de programmation : traduit les processus de faon symbolique interprte : traduit les processus crit dans un langage de programmation.
grce gnralement : des expressions primitives (nombres, fonctions de base) des moyens de composition pour construire des expressions composees dexpressions primitives des moyens dabstraction pour nommer et manipuler des objets composs comme un tout, comme si ctait une expression primitive. Pour la programmation on distingue souvent deux sortes dobjets : les donnes (par ex. les nombres) les procdures (par ex. laddition de nombres) Les procdures portent gnralement sur des objets particuliers
4
Les expressions
linterprte Camel value des expressions > Caml Light version 0.74 #1230 ;; - : int = 1230 la rponse prcise le type de la rponse avec sa valeur. # 10 + (3*4);; - : int = 22 +, /, * sont des oprateurs dcrivant des procdures primitives, les nombres sont des expressions primitives. Une expression compose est forme partir dexpressions (primitives ou non) et doprateurs, termine par ;;
$) ) @@ 97531 8 6 4 2 0 )( '% # (&$$"!
5 6
Les dnitions
Pour manipuler des objets, ncessit de les nommer: loprateur let # j # # k let j = 20 ;; : int = 20 30 - j ;; : int = 10 let k = 3* j + 27;; : int = 87
La dnition est le moyen de base de labstraction. Elle permet : de reprsenter le rsultat doprations composes ;
de construire des objets complexes par tapes dveloppement et test incrmental des programmes.
Pour cela il faut pouvoir dnir des procdures, moyen dabstraction plus puissant que le nommage dun objet, en nommant des oprations composes partir de paramtres.
7
Les fonctions
ncessit de manipuler des fonctions, avec paramtres de diffrentes sortes, en nombre diffrents besoin dabstraire les fonctions ce qui dnit une fonction : ses paramtres (appels variables en maths) et la faon dont on la calcule;
mais une fonction peut ltre de plusieurs choses: lnergie cintique en physique, EC: m v Pour dnir une fonction on spcie donc les paramtres et le corps: m v = 0.5 *. m *. v *. v ;;
let cinetik
retourne la fonction cinetik : float -> float -> float = <fun> A lapplication dune fonction, par ex. (cinetik 75.5 25.9), les paramtres formels sont remplacs par les valeurs fournies.
8
x*x
Conditionnelles (suite)
On peut utiliser les oprateurs suivants sur les conditions (boolens): = galit (oprateur polymorphe) or ou logique & et logique not ngation
exercice :
2
10
Exercices
1. Evaluer les expressions suivantes 10;;
5 + 3 + 4;;
9 - 1.;;
6 / 2;;
let a = 3;;
let b = a + 3 ;;
a + (b * a) ;;
a = b ;;
2. Ecrire une fonction qui calcule la circonfrence dun cercle en fonction de son rayon.
11
12
1
4
4 (4 8 4
1
8 4
1
1
0 8
1
8 1 8 1
1
A retenir :
Le sens dune procdure est indpendant des noms des paramtres formels: let carre x = x * x;; let carre y = y * y;;
Les noms des paramtres dune procdure sont locaux au corps de la procdure let assez-bon? estimation x = (abs ((carre estimation) - x)) < .0001 ;; let carre x = x * x;;
13
Exercices
Ecrire des fonctions ralisant les oprations suivantes : 1. calcul de la norme dun vecteur (2d) donn par ses coordonnes 2. calcul de la moyenne de deux nombres (rels) 3. calcul du maximum de deux entiers 4. vrier si 3 nombres correspondent aux longueurs des cts dun triangle rectangle
14
Processus et procdures
Pour savoir programmer il faut : connatre les lments de base de la programmation
connatre les procdures les plus utiles tre capable de prvoir le droulement des acions qui suivra le processus et de diriger ce droulement par un programme. et maintenant quelques formes typiques de droulement de processus...
15
procdures informatiques produit un rsultat mais ne dit pas la valeur exacte... ralisation
proprits
ex
tel que
et
16
1.41412 ... ... Exercice : crire les procdures qui permettent de calculer la racine avec cette mthode.
Exercices
Ecrire des fonctions ralisant les oprations suivantes : 1. le maximum de trois entiers.
18
Exemple pour
1.5 1.4167
17
Dcomposition dun programme en procdures (sous-problmes): pourrait tre arbitraire ? blocs de 10 lignes non: limportant est que chaque procdure excute une tche bien dnie
on nest pas oblig de soccuper de la faon dont la procdure calcule ce quon lui demande de calculer: ce qui nous intresse est le rsultat
Lutilisateur dune procdure nest pas forcment son auteur il peut la recevoir comme une bote noire venant dun autre, ralisant une certaine fonction (do limportance de lexplicitation des paramtres, interface unique entre la fonction et le programmeur qui lutilise.
19
lensemble des expressions pour lesquelles une liaison dnit un nom est appel la porte de ce nom.
les variables lis dclares comme paramtre dune procdure ont pour porte le corps de cette procdure.
22
Comment rcuperer une valeur de doublet ? let zorgbl x y = let m = minmax x y in (2 * (fst m) + (snd m));; let zorgbl x y = let (m1,m2) = minmax x y in (2* m1 + m2);;
Intrt : regrouper des donnes lies intrinsquement dans un seul objet. Exemple : les vecteurs. Si on crit une somme de 2 vecteurs ( deux dimensions): let som_vect x1 y1 x2 y2 = (x1+x2),(y1+y2) ;; Plus structur (plus abstrait): let som_vect v1 v2 = (fst v1)+(fst v2), (snd v1)+(snd v2);;
23
Les Listes
Si on a besoin dun nombre quelconque (et qui peut voluer) de donnes similaires, on ne peut se contenter de tuples (ex: dictionnaire de mots). Pour cela on peut utiliser des listes: une liste est un ensemble de donnes de mme type. on note une liste [ donnee1; donnee2 ; ... ; donneep ]
Par exemple une liste dentiers: [ 2 ; 19 ; 16 ; 23 ; 20 ] La liste vide est note [] On peut extraire des lments dune liste grce aux deux oprations suivantes, hd(head), tl(tail): hd [ 23 ; 45 ; 78 ];; retourne 23 tl [ 23 ; 45 ; 78 ];; retourne [ 45 ; 78 ] On peut construire une liste avec les oprateurs suivants : 23::[ 45 ; 67 ] retourne [ 23 ; 45 ; 67] [96 ; 23]@[ 45 ; 67 ] retourne [ 96 ; 23 ; 45 ; 67]
24
Exercices
1. Ecrire une fonction qui retourne le maximum dune liste dentiers. 2. Ecrire une fonction qui retourne la somme des lments dune liste 3. Ecrire une liste qui retourne la liste des carrs des lments dune liste entire. 4. Ecrire la fonction map qui retourne la liste des lments dune liste auxquels on a appliqu une fonction f. ex: (map [1 ; 2; 3] carre) [1 ; 4 ; 9]
25
26