Programmation Fonctionnelle Introduction



Documents pareils
Logiciel Libre Cours 2 Fondements: Programmation

Évaluation et implémentation des langages

Éléments de programmation et introduction à Java

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

Algorithmique et Programmation Fonctionnelle

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

Présentation du langage et premières fonctions

Architecture N-Tier. Ces données peuvent être saisies interactivement via l interface ou lues depuis un disque. Application

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

Master Informatique Aix-Marseille Université

Programmation Web. Madalina Croitoru IUT Montpellier

La dernière base de données de Teradata franchit le cap du big data grâce à sa technologie avancée

Préparation à l examen EFA en Macro

Programmation. fonctionnelle, impérative, logique et orientée objet

STAGE IREM 0- Premiers pas en Python

Lambda-calcul et langages fonctionnels

Grid Technology. ActiveMQ pour le grand collisionneur de hadrons (LHC) Lionel Cons Grid Technology Group Information Technology Department

INFORMATIQUE & WEB. PARCOURS CERTIFICAT PROFESSIONNEL Programmation de sites Web. 1 an 7 MODULES. Code du diplôme : CP09

Le génie logiciel. maintenance de logiciels.

Le Master Mathématiques et Applications

Les Biolangages. Thierry Lecroq. Université de Rouen FRANCE. university-logo. Thierry Lecroq (Univ. Rouen) MB / 16

Entraînement au concours ACM-ICPC

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

SysFera. Benjamin Depardon

Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)

Vérification formelle de la plate-forme Java Card

Autres langages de l IA

Manuel d installation de l application Dimona New via SMS

Le Collège de France crée une chaire pérenne d Informatique, Algorithmes, machines et langages, et nomme le Pr Gérard BERRY titulaire

Informatique industrielle A Systèmes temps-réel J.F.Peyre. Partie I : Introduction

Annexe : La Programmation Informatique

Mise en œuvre des serveurs d application

Lier Erlang avec d autres langages de programmation

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

Introduction au langage C

Recherche dans un tableau

Cours 1 : La compilation

INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau)

Machines virtuelles. Brique ASC. Samuel Tardieu Samuel Tardieu (ENST) Machines virtuelles 1 / 40

MapReduce. Malo Jaffré, Pablo Rauzy. 16 avril 2010 ENS. Malo Jaffré, Pablo Rauzy (ENS) MapReduce 16 avril / 15

CQP Développeur Nouvelles Technologies (DNT)

Support de TD ArcGIS Introduction à l automatisation et au développement avec ArcGIS 10.1 JEAN-MARC GILLIOT e année ingénieur

Cours d Algorithmique et de Langage C v 3.0

Cours. Cours 8 : Révisions. Importance. Interface homme-machine

Java 1.5 : principales nouveautés

Les Langages Informatiques

Semestre 1. Objectifs Approfondissement de l environnement Java et de son interface de programmation d applications : réseaux, et processus.

modules & compilation

Note de cadrage du PEPI MACS Mathématiques Appliquées & Calcul Scientifique

Cloud et SOA La présence du Cloud révolutionne-t-elle l approche SOA?

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

Classes et Objets en Ocaml.

Module BD et sites WEB

UTILISATION DE LA PLATEFORME WEB D ANALYSE DE DONNÉES GALAXY

PLAN DE COURS. Reconnaître le rôle des mathématiques ou de l informatique dans la société contemporaine (0011)

INTERSYSTEMS CACHÉ COMME ALTERNATIVE AUX BASES DE DONNÉES RÉSIDENTES EN MÉMOIRE

Iyad Alshabani SysCom - CReSTIC Université de Reims 17/02/2011 1

Interface Homme-Machine. Philippe Gaussier Alexandre Pitti

Chapitre 1 Qu est-ce qu une expression régulière?

Optimisation de logiciels de modélisation sur centre de calcul

Atelier de l Ecole doctorale : Latex, Lyx, and friends Chapitre 2 : Gestion de la bibliographie

Calculabilité Cours 3 : Problèmes non-calculables.

Attaques applicatives

Machines virtuelles Cours 1 : Introduction

Cours de Java. Sciences-U Lyon. Java - Introduction Java - Fondamentaux Java Avancé.

Hadoop, Spark & Big Data 2.0. Exploiter une grappe de calcul pour des problème des données massives

Argument-fetching dataflow machine de G.R. Gao et J.B. Dennis (McGill, 1988) = machine dataflow sans flux de données

DSL. Domain Specific Language. À l'aide des technologies Eclipse Modeling. Goulwen Le Fur Le 23 novembre 2012

Panorama des solutions analytiques existantes

THÉMATIQUES. Comprendre les frameworks productifs. Découvrir leurs usages. Synthèse

Compétences en fin de maternelle Comparer des quantités.

RTDS G3. Emmanuel Gaudin

L informatique en BCPST

laposte.net) Ministère de l'éducation nationale Atelier sécurité Rabat RALL 2007

Exonet : sauvegarde automatisée d une base de données

Chapitre VI- La validation de la composition.

MOTEUR DE WORKFLOW Mise en oeuvre d'openwfe Version septembre 2006

M1if22 - Logiciels éducatifs Conception & rôle de l enseignant

Perl Console. Votre compagnon pour développer en Perl. Les Journées du Perl , 17 novembre, Lyon. Alexis Sukrieh

Un zeste d Erlang dans le shaker!

LANGAGUE JAVA. Public Développeurs souhaitant étendre leur panel de langages de programmation

R+Hadoop = Rhadoop* Des logiciels libres complémentaires, une implémentation, une réponse au nouveau paradigme du bigdata!

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Table des matières. Introduction

PHP et le Cloud. All rights reserved. Zend Technologies, Inc.

Tapez le titre de la page «BASTIA ville méditerranéenne», puis allez deux fois à la ligne à l aide de la touche Entrée.

Merise. Introduction

Programme «Analyste Programmeur» Diplôme d état : «Développeur Informatique» Homologué au niveau III (Bac+2) (JO N 176 du 1 août 2003) (34 semaines)

Informatique UE 102. Jean-Yves Antoine. Architecture des ordinateurs et Algorithmique de base. UFR Sciences et Techniques Licence S&T 1ère année

Cours de Master Recherche

Contribution aux rapports entre la logique combinatoire et les T[Σ]-algèbres.

Gestionnaire de réseaux Linux et Windows

Serveur d Applications Web : WebObjects

Agile 360 Product Owner Scrum Master

Programmation de services en téléphonie sur IP

INF2015 Développement de logiciels dans un environnement Agile Examen final hiver 2015

Enseignant: Lamouchi Bassem Cours : Système à large échelle et Cloud Computing

Traduction des Langages : Le Compilateur Micro Java

Transcription:

Programmation Fonctionnelle Introduction Luigi Santocanale LIF, Aix-Marseille Université Marseille, FRANCE 28 septembre 2015

Plan

Le cours 3/23 Cours basé sur le livre : Graham Hutton. Programming in Haskell. Cambridge University Press, 2007.

Bureaucratie 4/23 Calcul de la note finale (I session) : NF = 0,7 Examen + 0,3 Projet Attention : on ne rattrappe pas le projet. Calcul de la note finale (II session) : NF = max(examen;0,7 Examen + 0,3 Projet) Page web du cours : pageperso.lif.univ-mrs.fr/ luigi.santocanale/teaching/pf/

5/23 La «crise» du logiciel Comment : gérer la taille et la complexité des programmes modernes? réduire le temps et le coût du développement logiciel? accroître notre confiance qu un programme fonctionne correctement?

6/23 Langages de programmation Une approche : deviser des langages de programmation qui permettent que les programmes soient écrits clairement, à un haut niveau d abstraction ; supportent des composantes logicielles réutilisables ; encouragent le recours à la vérification formelle ; permettent un prototypage rapide ; offrent des outils puissants pour résoudre les problèmes. Langages de programmation fonctionnels : boite à outils particulerièrement élégante permettant de réaliser ces objectifs.

6/23 Langages de programmation Une approche : deviser des langages de programmation qui permettent que les programmes soient écrits clairement, à un haut niveau d abstraction ; supportent des composantes logicielles réutilisables ; encouragent le recours à la vérification formelle ; permettent un prototypage rapide ; offrent des outils puissants pour résoudre les problèmes. Langages de programmation fonctionnels : boite à outils particulerièrement élégante permettant de réaliser ces objectifs.

7/23 Une autre histoire... Langages fonctionnels développés dans le départements d informatique théorique... Au début : pas de succès en dehors du milieu académique Des idées se propagent en dehors du milieu (e.g. gestion de la mémoire, fonctions d ordre supérieure,... ) Récemment : intérêt renaissant et grandissant pour ces langages... apparenté au succès des langages des scripts (python, ruby, perl)...... et à la puissance actuelle de l hardware.

8/23 Qu est ce qu un langage fonctionnel? Plusieurs avis, pas de définition précise, mais (en gros) : la programmation fonctionnelle est un style de programmation, où l étape élémentaire du calcul est l application d une fonction à ses arguments. un langage est fonctionnel s il supporte et encourage ce style fonctionnel.

Exemple 9/23 Sommation des entiers de 1 à 5 en Java : total = 0; for ( i = 1; i <= 5; ++ i) total = total +i; Le calcul répose sur : l affectation des variables ; les boucles.

Exemple 10/23 La fonction somme en Haskell : somme :: [ Int ] -> Int somme [] = 0 somme ( x: xs) = x + somme xs Sommation des entiers de 1 à 5 en Haskell : somme (1:2:3:4:5:[]) = 1 + somme (2:3:4:5:[]) = 1 + 2 + somme (3:4:5:[]) = 1 + 2 + 3 + somme (4:5:[]) = 1 + 2 + 3 + 4 + somme (5:[]) = 1 + 2 + 3 + 4 + 5 + somme [] = 1 + 2 + 3 + 4 + 5 + 0 = 15

Exemple 10/23 La fonction somme en Haskell : somme :: [ Int ] -> Int somme [] = 0 somme ( x: xs) = x + somme xs Sommation des entiers de 1 à 5 en Haskell : somme (1:2:3:4:5:[]) = 1 + somme (2:3:4:5:[]) = 1 + 2 + somme (3:4:5:[]) = 1 + 2 + 3 + somme (4:5:[]) = 1 + 2 + 3 + 4 + somme (5:[]) = 1 + 2 + 3 + 4 + 5 + somme [] = 1 + 2 + 3 + 4 + 5 + 0 = 15

11/23 La méthode de calcul répose sur : l application d une fonction à ses arguments ; la récursion ; l évaluation d une expression vers un valeur.

Affectation des variables versus application 12/23 Considérez l expression Haskell let x = 3 + 4 in x + 5 On peut lire cette expression par : appliquer le résultat de l évaluation 3 + 4 à la fonction f définie par f (x) := x + 5 Dans les langages de programmation fonctionnels, la notion de variable, au sens usuel, disparaît.

Un avant-goût de Haskell 13/23 f [] = [] f (x:xs) = f ys ++ [x] ++ f zs where ys = [ a a <- xs, a <= x] zs = [ b b <- xs, b > x] f appliqué à la liste vide est la liste vide, f appliqué à une liste non vide est composéé de troix morceaux (dans l ordre) : où 1. f de ys, 2. la tête de la liste, 3. f de xs, 1. ys est la liste des a t.q.... 2. zs est la liste des b t.q....

Un avant-goût de Haskell 13/23 f [] = [] f (x:xs) = f ys ++ [x] ++ f zs where ys = [ a a <- xs, a <= x] zs = [ b b <- xs, b > x] f appliqué à la liste vide est la liste vide, f appliqué à une liste non vide est composéé de troix morceaux (dans l ordre) : où 1. f de ys, 2. la tête de la liste, 3. f de xs, 1. ys est la liste des a t.q.... 2. zs est la liste des b t.q....

Historique 14/23 1930s : Alonzo Church développe le lambda-calcul, une théorie des fonctions, simple mais puissante.

Historique 15/23 1930s : Haskell B. Curry développe la logique combinatoire, qui deviendra le moteur des langages fonctionnels (paresseux).

Historique 16/23 1950s : John McCarthy développe Lisp, le premier langage fonctionnel, sous l influence du lambda-calcul, mais en conservant l affectation des variables.

Historique 1960s : Peter Landin développe ISWIM 1 : le premier langage de programmation fonctionnel pur, fortement basé sur le lambda-calcul, sans affectation de variables. 1. De : «If you See What I Mean» 17/23

Historique 18/23 1970s : John Backus développe FP, un langage de programmation fonctionnel qui pose l accent sur les fonctions d ordre supérieur et sur l intégration avec le raisonnement sur les programmes.

Historique 19/23 1970s : Robin Milner et autres développent ML, le premier langage fonctionnel moderne, qui introduit l inférence de type et les types polymorphes.

Historique 20/23 1970s - 1980s : David Turner développe un nombre de langages fonctionnels paresseux (lazy), qui culminent dans le système Miranda (ancêtre de Haskell).

Historique 21/23 1987 : Un comité international de chercheurs débute le développement de Haskell, un langage fonctionnel paresseux standard.

Historique 22/23 2003 : Le comité publie le rapport Haskell 98, qui définit une version stable du langage.

Les héros nationaux 23/23 1985 : Gérard Huet et son équipe à l INRIA développent CAM, une version du langage ML destiné à s intégrer avec le système Coq. Autres intervenant dans le chemin CAM->CAML->OCAML : Xavier Leroy, Didier Rémy, Jérôme Vouillon.