Programmer avec des Fonctions

Documents pareils
Corrigé des TD 1 à 5

IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Cours Informatique Master STEP

I. Introduction aux fonctions : les fonctions standards

Premiers pas avec Mathematica

Capacité d un canal Second Théorème de Shannon. Théorie de l information 1/34

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

Correction de l examen de la première session

Cours 7 : Utilisation de modules sous python

Exercices types Algorithmique et simulation numérique Oral Mathématiques et algorithmique Banque PT

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30


STAGE IREM 0- Premiers pas en Python

Initiation à la programmation en Python

Coefficients binomiaux

Probabilités. Rappel : trois exemples. Exemple 2 : On dispose d un dé truqué. On sait que : p(1) = p(2) =1/6 ; p(3) = 1/3 p(4) = p(5) =1/12

Rappels sur les suites - Algorithme

EXERCICE 4 (7 points ) (Commun à tous les candidats)

Exercices - Polynômes : corrigé. Opérations sur les polynômes

3. SPÉCIFICATIONS DU LOGICIEL. de l'expression des besoins à la conception. Spécifications fonctionnelles Analyse fonctionnelle et méthodes

Cours No 3 : Identificateurs, Fonctions, Premières Structures de contrôle.

Cours d Analyse. Fonctions de plusieurs variables

Rappels Entrées -Sorties

Exercices - Fonctions de plusieurs variables : corrigé. Pour commencer

Le théorème de Perron-Frobenius, les chaines de Markov et un célèbre moteur de recherche

Algorithmique et programmation : les bases (VBA) Corrigé

De même, le périmètre P d un cercle de rayon 1 vaut P = 2π (par définition de π). Mais, on peut démontrer (difficilement!) que

Correction du baccalauréat S Liban juin 2007

MATLAB : COMMANDES DE BASE. Note : lorsqu applicable, l équivalent en langage C est indiqué entre les délimiteurs /* */.

TESTS D'HYPOTHESES Etude d'un exemple

{less} Guide de démarrage

Représentation géométrique d un nombre complexe

Studio. HERITIER Emmanuelle PERSYN Elodie. SCHMUTZ Amandine SCHWEITZER Guillaume

Fonctions de plusieurs variables

Chapitre 4: Dérivée d'une fonction et règles de calcul

ALGORITHMIQUE ET PROGRAMMATION En C

LES GENERATEURS DE NOMBRES ALEATOIRES

DYNAMIQUE DE FORMATION DES ÉTOILES

Recherche dans un tableau

TP 1. Prise en main du langage Python

Introduction au pricing d option en finance

Calcul Formel et Numérique, Partie I

Les équations différentielles

Calcul intégral élémentaire en plusieurs variables

Chafa Azzedine - Faculté de Physique U.S.T.H.B 1

Logique : ENSIIE 1A - contrôle final

1 Comment faire un document Open Office /writer de façon intelligente?

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

DÉRIVÉES. I Nombre dérivé - Tangente. Exercice 01 (voir réponses et correction) ( voir animation )


Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Exercice 1 Trouver l équation du plan tangent pour chaque surface ci-dessous, au point (x 0,y 0,z 0 ) donné :

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

UE Programmation Impérative Licence 2ème Année

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Examen optimisation Centrale Marseille (2008) et SupGalilee (2008)

BACCALAURÉAT GÉNÉRAL SESSION 2012 OBLIGATOIRE MATHÉMATIQUES. Série S. Durée de l épreuve : 4 heures Coefficient : 7 ENSEIGNEMENT OBLIGATOIRE

Structures algébriques

Exercice autour de densité, fonction de répatition, espérance et variance de variables quelconques.

Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples

Anne Tasso. Java. Le livre de. premier langage. 10 e édition. Avec 109 exercices corrigés. Groupe Eyrolles, , ISBN :

Chapitre 2. Eléments pour comprendre un énoncé

Présentation du langage et premières fonctions

FONCTIONS DE PLUSIEURS VARIABLES (Outils Mathématiques 4)

Continuité et dérivabilité d une fonction

Probabilités sur un univers fini

Probabilités sur un univers fini

Manuel d utilisation 26 juin Tâche à effectuer : écrire un algorithme 2

BACCALAURÉAT PROFESSIONNEL SUJET

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Précision d un résultat et calculs d incertitudes

Rappels et compléments, première partie : Nombres complexes et applications à la géométrie

Découverte de Python

1. Structure d'un programme FORTRAN 95

Baccalauréat S Antilles-Guyane 11 septembre 2014 Corrigé

Chapitre 1 : Introduction aux bases de données

Objets Combinatoires élementaires

Cours d Algorithmique et de Langage C v 3.0

Télécom Nancy Année

Enseignement secondaire technique

Algorithmique et Programmation, IMA

1 Définition et Appel d une fonction. V. Phan Luong. Cours 4 : Fonctions

Comment créer et utiliser une fonction

length : A N add : Z Z Z (n 1, n 2 ) n 1 + n 2

Les chaînes de caractères

Licence Sciences et Technologies Examen janvier 2010

O b s e r v a t o i r e E V A P M. Taxonomie R. Gras - développée

Chapitre 2 Le problème de l unicité des solutions

8.1 Généralités sur les fonctions de plusieurs variables réelles. f : R 2 R (x, y) 1 x 2 y 2

L exclusion mutuelle distribuée

Maple: premiers calculs et premières applications

Logiciel Libre Cours 3 Fondements: Génie Logiciel

Dérivation CONTENUS CAPACITÉS ATTENDUES COMMENTAIRES

= 1 si n = m& où n et m sont souvent des indices entiers, par exemple, n, m = 0, 1, 2, 3, 4... En fait,! n m

La classification automatique de données quantitatives

Continuité en un point

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Distribution Uniforme Probabilité de Laplace Dénombrements Les Paris. Chapitre 2 Le calcul des probabilités

L informatique en BCPST

Transcription:

Programmation Fonctionnelle I, 2009-2010 L1 Info&Math - Faculté des Sciences de Nice http://deptinfo.unice.fr/~roy Cours n 2 Programmer avec des Fonctions

Calculer avec des Fonctions Un algorithme est une méthode systématique de calcul d'une certaine quantité y à partir d'autres quantités x 1, x 2, x 3,... On dit que y s'exprime en fonction de x 1, x 2, x 3,... Exemple : calculer le périmètre P d'un cercle à partir de son rayon r. P =2πr Notre langage de programmation Scheme va nous permettre d'exprimer ce calcul par une notation fonctionnelle : (define (perimetre r) (* 2 pi r)) perimetre : R R

Arité d'une Fonction L'arité d'une fonction est le nombre d'arguments qu'elle attend : (define (loto) (random 50)) Arité 0 (define (perimetre r) (* 2 pi r)) Arité 1 (unaire) (define (somme-carres x y) (+ (* x x) (* y y))) Arité 2 (binaire) (define (distance x1 y1 x2 y2) (sqrt (+ (sqr (- x1 x2)) (sqr (- y1 y2))))) Arité 4 La primitive + (+ 2 3) (+ 2 3 4) (+ 2 3 4 5) Arité variable

Paramètres dans une définition de fonction Les paramètres sont des variables abstraites du texte de la fonction. En principe leur nom n'a pas d'importance : elles sont muettes. (define (perimetre r) (* 2 pi r)) (define (perimetre k) (* 2 pi k)) Pourquoi seulement en principe? (define (périmètre pi) (* 2 pi pi))? Idem en maths : ax 2 dx = ay 2 dy = au 2 du aa 2 da?

Arguments dans un Appel de Fonction Il y a deux moments dans l'histoire d'une fonction : 1. le moment où on la définit 2. le moment où on l'utilise 1. Le moment où on la définit où on l'invoque où on l'appelle où on l'exécute paramètres [variables muettes] (define (somme-carres x y) (+ (* x x) (* y y))) l'expression formant le corps de la fonction Soit somme-carres la fonction définie par : somme-carres(x,y) = x 2 + y 2 x C, y C

2. Le moment où on l'utilise Les arguments sont des expressions qui vont être évaluées au moment de l'appel de la fonction, et qui deviendront les valeurs des paramètres. appel de fonction arguments temporaires, juste le temps de calculer la fonction... (somme-carres (+ 2 3) (* 4 5)) valeurs des arguments : 5 20 x =5 y =20 (+ (* x x) (* y y)) 425

Un peu de style SVP... On ne choisit pas le nom des variables au hasard! Pensez au lecteur... (define (perimetre x) (* 2 pi x)) Bad (define (perimetre r) (* 2 pi r)) Good (define (perimetre rayon) (* 2 pi rayon)) Very good On indente le texte de la fonction [distance à la marge], en fonction du nombre de parenthèses ouvrantes non fermées. Les éditeurs de texte le font automatiquement. Sinon : Ctrl-i pour ré-indenter tout! On documente un minimum la fonction, avec des commentaires.

Documentez vos fonctions! Il est en effet de bon ton de faire précéder le texte d'une fonction non triviale de commentaires décrivant ses paramètres, et expliquant ce qu'elle calcule, avec les astuces algorithmiques si besoin. ; (fac n) retourne la factorielle n! ; On suppose n entier 0 la spécification en commentaire (define (fac n) ; nat nat (if (= n 0) 1 (* n (fac (- n 1))))) (printf "(fac 10) = ~a\n" (fac 10)) (check-expect (fac 10) 3628800) tests nat = { entiers 0 }

Quelques fonctions simples en maths... La primitive (random n), avec n entier > 0, retourne un entier aléatoire de l'intervalle [0,n-1]. Par exemple (random 3) {0,1,2}. Exemple : un dé truqué! Je souhaite tirer 0 ou 1, mais : 0 : avec 1 chance sur 3 1 : avec 2 chances sur 3 Or (random 2) donne 0 ou 1 avec la même probabilité 1/2 J'utilise donc un dé à 3 faces marquées 0, 1, 2 [car 3 cas possibles]. (define (de-truque) ; nat (local [(define tirage (random 3))] ; dé à 3 faces : 0,1,2 (if (= tirage 0) 0 ; proba(0) = 1/3 1))) ; proba(1) = 2/3

2 Une suite convergente vers. u 0 =1,u n = 1 2 (u n 1 + 2 u n 1 ) lim n u n = 2 (define (terme-suivant u) (/ (+ u (/ 2 u)) 2)) ; real real Une version un peu plus décomposée : (define (terme-suivant u) (moyenne u (/ 2 u))) (define (moyenne a b) (/ (+ a b) 2)) ; real real ; real real real Deux avantages : - un peu plus lisible - la fonction (moyenne a b) pourra être ré-utilisée ailleurs.

; Je prends comme premier terme a ; un réel quelconque > 0 > (define a #i54.0) > (define u1 (terme-suivant a)) > (define u2 (terme-suivant u1)) > (define u3 (terme-suivant u2)) > (define u4 (terme-suivant u3)) > (define u5 (terme-suivant u4)) > (define u6 (terme-suivant u5)) > (define u7 (terme-suivant u6)) > (define u8 (terme-suivant u7)) Et si je veux calculer plus loin? Il est urgent d'avoir un moyen d'exprimer une répétition!... > u1 #i27.01851851851852 > u2 #i13.546270911075572 > u3 #i6.846956509801686 > u4 #i3.569528547256061 > u5 #i2.064913314814075 > u6 #i1.5167384879448198 > u7 #i1.4176786819197515 > u8 #i1.4142177971315157 > etc. On flaire la convergence! > (sqrt 2) 1.4142135623730951

Une rotation plane. Soit à trouver l'image N d'un point M(x,y) par la rotation de centre ΩΩ(a,b) et d'angle. ΩM = r α ( ΩM) M'(x',y') z Ω = e iα (z Ω) ΩΩ(a,b) M(x,y) ou bien z=x+yi (define (rotation omega alpha z) (+ omega (* (- z omega) (exp (* +i alpha))))) > (rotation 0 (/ pi 4) 1) ; rotation du complexe 1 autour de O #i0.7071067811865476+0.7071067811865475i > (/ (sqrt 2) 2) ; histoire de vérifier... #i0.7071067811865476

On peut bien entendu traiter le problème dans les réels, en séparant parties réelle et imaginaire : (define (rotation a b alpha x y)...) Mais alors je ne sais pas retourner DEUX réels! Les langages de programmation utilisent donc à cet effet des données composées. Tout comme les matheux utilisent des vecteurs... Wait and see! La plupart des langages de programmation permettent de programmer des fonctions E 1 x... x E n F, mais hélas pas E 1 x... x E n F 1 x... x F p Bien que le langage Scheme le permette, nous n'utiliserons pas cette facilité, de manière à rester compatibles avec les autres langages!

Les fonctions anonymes Les matheux savent parler d'une fonction sans lui donner de nom : (x, y) x 2 + y Nous aussi : (lambda (x y) (+ (sqr x) y)) Autres exemples : x x 3 (lambda (x) (* x x x)) (x, y, z) x y + z (lambda (x y z) (+ x (- y) z)) 3 (lambda () 3) Ce sont des fonctions anonymes.

On peut prendre la valeur en un point d'une fonction anonyme : > ((lambda (x) (* x x x)) 2) 8 > ((lambda (x y z) (+ x (- y) z)) 3 4 9) 8 > ((lambda () 3)) 3 On peut toujours briser l'anonymat et donner un nom à la fonction : (define cube (lambda (x) (* x x x))) (define (cube x) (* x x x)) > (cube 2) 8 > (lambda (x) (* x x x)) #<procedure> > cube #<procedure:cube>

Une fonction peut très bien prendre une fonction comme argument retourner une fonction en résultat Fonction Nombre La prise de valeur en 0 (define (val0 f) (f 0)) > (val0 cos) 1 > (val0 (lambda (x) (+ x 3)) 3 Fonction Réel Réel La dérivation approchée f'(x) (define (derivee f x) (/ (- (f (+ x #i0.001)) (f x)) #i0.001)) Fonction Fonction Fonction La composition de fonctions [la loi rond] (define (compose f g) (lambda (x) (f (g x)))) > (define cos^2 (compose sqr cos)) > (cos^2 pi) #i1.0 x cos 2 x > (derivee log 2) #i0.49987504165105445 log (x) = 1 x