CSI3525: Concepts des Langages de Programmation Notes # 5: Langages de Programmation Fonctionelle I: Introduction au Scheme.

Slides:



Advertisements
Présentations similaires
Transformation de documents XML
Advertisements

Introduction à l’Algorithmique
Calculs de complexité d'algorithmes
Algorithmique Résume.
GEF 243B Programmation informatique appliquée Expressions et opérateurs §
GEF 243B Programmation informatique appliquée Expressions et opérateurs.
Plan : Définition L’affectation Les entrées Les sorties exercices
Chap 1 Grammaires et dérivations.
INTRODUCTION.
Introduction : Compilation et Traduction
Les sous-programmes Chapitre n° 5: Objectifs : Activité:
CSI3525: Concepts des Langages de Programmation Notes # 11: Sous-Programmes ( Lire Chapitre 8 )
Les bases de l’Algorithmique
Points importants de la semaine Les commentaires. Les variables. Les instructions conditionnelles. Les instructions itératives (les boucles).
Semaine #1 INF155 par Frédérick Henri.
Sous-programmes Concepts généraux Passage de paramètres Fonctions
Un langage de programmation fonctionnelle
OCaml - Les listes L3 MI.
Partie 1 Etude de l'existant
Démarche de résolution de problèmes
Expressions et assignations
Les éléments de base de l’algorithmique
CSI3525: Concepts des Langages de Programmation Notes # 12: Implementation des Sous-Programmes ( Lire Chapitre 9 )
Programmation fonctionnelle Le langage LISP
Algorithmique et Programmation
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
Les Fonctions. Définir une fonction Sections de code indépendantes que lon peut appeler à nimporte quel moment et dans nimporte quel ordre. Bout de code.
Semaine #1 INF130 par Frédérick Henri.
Semaine #1 INF135 par Frédérick Henri.
Principes de programmation
CSI3525: Concepts des Langages de Programmation
CSI3525: Concepts des Langages de Programmation Notes # 7: Noms, Liaisons, Verification de Type et Portee ( Lire Chapitre 4 )
1 CSI3525: Concepts des Languages de Programmation Notes # 4: Description Semantique des Languages.
1 CSI3525: Concepts des Languages de Programmation Notes # 3: Description Syntaxique des Languages.
CSI3525: Concepts des Languages de Programmation
Programmation fonctionnelle
Chapitre 3 Syntaxe et sémantique.
Partie II Sémantique.
Sémantique dénotationnelle
CSI3525: Concepts des Langages de Programmation Notes # 6: Langages de Programmation Fonctionelle II: Introduction au ML.
Programmation non procédurale Le projet ECOLE 2000
Modélisation des opérations Spécifier les transformations détat que lon attend des services de la machine Létat dune machine entièrement déterminée par.
Animateur : Med HAIJOUBI
Paradigmes des Langages de Programmation
Paradigmes des Langages de Programmation
CSI2520  cdr vers le bas, cons vers le haut (define (traite-liste L) (if (null? L) () (cons (traite (car L)) (traite-liste (cdr L)))))
O-notation 1. Introduction 2. O-notation 3. Opérations 3.1 Somme 3.2 Produit 4. Règles générales 5. Exemple 6.Analyse des algorithmes récursifs 6.1 Dilatation.
Programmation fonctionnelle Lambda-calcul
INTRODUCTION.
Un survol du language C.
CSI3525: Concepts des Langages de Programmation Notes # 13: Introduction au SmallTalk.
Arbres binaires et tables de hachage
D.E ZEGOUR Ecole Supérieure d’Informatique. Problèmes de décision Concepts de base Expressions régulières Notation particulière pour exprimer certaines.
Le langage Racket (Lisp)
Introduction au langage C Fonctions et Procédures
Sémantique des instructions pour le langage Z minimal Pr ZEGOUR DJAMEL EDDINE Ecole Supérieure d’Informatique (ESI)
Méthodes et outils de conception Introduction à la programmation Paramètre de retour Appel d’une fonction Portée des variables Définition Pourquoi les.
1 École des Mines de Saint-Etienne. 158, cours Fauriel Saint-Etienne Cedex 2. Tél Fax Jean-Jacques Girardot
1 Deuxième journée La programmation procédurale. 2 Unité de programmation : la procédure ou fonction Très semblable au math Un programme est un ensemble.
Programmation fonctionnelle Preuve
Introduction et Généralités sur l’Algorithmique
Introduction au langage C : Structures de contrôle 1 ère année Génie Informatique Dr Daouda Traoré Université de Ségou
Nouvelles Technologies Internet & Mobile
Scripts et fonctions Instructions de contrôle
Philippe Gandy - 8 septembre 2015 Basé sur les notes de cours de Daniel Morin et Roch Leclerc.
Initiation aux bases de données et à la programmation événementielle
Algorithmique Boucles et Itérations
ALGORITHME ET PROGRAMMATION RÉVISION Informatique et Sciences du Numérique.
IFT359 – Programmation fonctionnelle Thème 07 Fermeture, affectation ou monades 1.
IFT359 – Programmation fonctionnelle Thème #10 Évaluation par environnement et évaluateur méta-circulaire 1.
Transcription de la présentation:

CSI3525: Concepts des Langages de Programmation Notes # 5: Langages de Programmation Fonctionelle I: Introduction au Scheme

Introduction I n Le paradigme de programmation fonctionelle est base sur les fonctions mathematiques. n Une fonction mathematique est une application qui va de lensemble de depart a lensemble darrivee. Elle prend un element de lensemble de depart et le transforme en un element de lensemble darrivee. n Les fonctions sont controllees par des appels recursifs et des instructions conditionnelles plutot que par des sequences dinstructions et des repetitions iteratives. n De meme, une fonction calcule toujours le meme resultat etant donne les memes arguments dentrée.

Introduction II n Les fonctions peuvent etre combinees de maniere elegante et pratique. n En particulier, on peut creer des fonctions dordre plus eleve--aussi appellees formes fonctionelles-- qui, ou bien prennent comme argument une autre fonction, ou bien retournent comme resultat une fonction. n Examples de formes fonctionelles: les compositions, les constructions et les applications generalisees.

Fondation des Langages de Programmation I n Lobjectif de la programmation fonctionnelle est dimiter le plus possible les fonctions mathematiques. Ces langages sont donc tres differents des langages imperatifs. n En particulier, un langage fonctionel pur nutilise ni variables ni instruction daffectement. Il utilise la recursion pour obtenir de la repetition. n Les programmes sont des definitions de fonctions et des specifications dapplications de fonctions. n Les executions sont des evaluations dapplications de fonctions.

Fondation des Langages de Programmation II n Un langage fonctionel doit avoir: – Un ensemble de fonctions primitives, – Un ensemble de formes fonctionnelles qui permettent de construire des fonctions complexes a partir de ces fonctions primitives, – Une operation dapplication de fonction, – Et, finallement, une ou plusieures structures de donnees n Bien que les langages fonctionnels soient souvent implementes avec des interpreteurs, ils peuvent aussi etre compiles.

Quelques examples en Scheme….

Lisp en General n Scheme (1975) represente lun des nombreux dialectes du Lisp (originellement: Lisp 1.5 (1975); plus recemment: Common Lisp (1985)). n Le Lisp 1.5 navait que deux types* de donnees: des atomes et des listes. Les atomes sont les symboles du Lisp. On peut avoir des listes de listes et une liste peut melanger les atomes et sous-listes de different degree sans probleme. n Example: (A (B C) D (E (F G))) est parfaitement valide. n * On parle dun type different des types en langages imperatifs.

Syntaxe du Lisp et de ses descendants n Les programmes et les donnees sont exprimes dans la meme syntaxe: – Applications de fonctions et structures conditionnelles sont ecrites sous la forme de listes, en parentheses en utilisant la forme prefix. – Programmes et donnees peuvent etre distingues par leurs contexte. n Cette uniformite dexpression donne aux langages fonctionnels leur flexibilite et leur puissance dexpression: les programmes peuvent etre manipules comme sils etaient des donnees!!

Les 5 fonctions primitives du Lisp Pur + 2 autres operations essentielles Primitives: n cons --- pour construire une liste n car --- pour trouver le premier element dune liste. n cdr --- pour trouver la queue dune liste. n eq -- pour verifier si deux atomes sont egaux. n atom -- pour verifier si une entite est un atome. Operations Supplementaires Essentielles: n Evaluation dune expression n Application dune fonction a des arguments (deja evalues) [Le Lisp 1.5 a aussi un certains nombre doperations auxilliaires pour gerer les listes darguments et les evaluations conditionnelles].

LUsage du Lisp et de ses Descendants I Comme Prolog et SmallTalk, Lisp est utilise interactivement: n Il ny a pas de programme principal n La boucle du niveau superieur evalue une expression (elle peut aussi faire du I/O). Cette expression, en revanche, peut invoqier une fonction qui implemente un algorithme long et complique n Un programme de Lisp consiste en une collection de fonctions qui peuvent etre appelees (directement ou indirectement) a partir de la boucle du niveau superieur.

LUsage du Lisp et de ses Descendants II n Les expressions sont, normallement, evaluees. Afin deviter levaluation, il faut le demander specifiquemen au Lisp en utilisant lexpression quote ou. n Les atomes sont traites literallement: ils sont ce quils sont et rien de plus: il se peut que latome ait une signification dans le domaine dapplication, mais le Lisp ne le sait pas.

Revenons au Scheme… Voici ses caracteristiques n Le Scheme est un langage de tres petite taille avec une syntaxe et semantique simple. n Il utilise levaluation a portee locale (ou statique). Cela signifie que la portee (ou visibilite) dune variable peut-etre determinee avant lexecution du programme. => La portee dune variable est plus simple a determiner que si elle doit etre determinee dynamiquement (comme en Lisp 1.5). n Il traite les fonctions comme entites de premiere classe, ce qui veut dire que les fonctions peuvent- etre manipulees comme des donnees. n Les structures de donnees sont simples, uniformes et versatiles et sappellent S-expressions (comme en Lisp)

Les Structures de Donnees n Nombres: entiers ou reels n Variables: – un nom attache a un objet (define pi ) – Le type dune variable est implicite et depend de sa valeur. – Une variable peut recevoir une nouvelle valeur: (set! pi ) (set! pi alpha) n Symboles: un nom et rien quun nom: pas de valeur! n Listes: (E1 E2…En) ou Ei est une S-expression

Les Fonctions Primitives I n +, -, *, et / => Notation Prefixe -- Ex: (+ 3 7) n EVAL est une fonction utilitaire appellee automatiquement a chaque etape de la boucle lecture-evaluation-ecriture de linterpreteur. Elle evalue, tout dabord, les parametres de la fonction, et ensuite, evalue la fonction appliquee a ces parametres. n quote ou est la fonction qui evite levaluation dexpressions. n car, cdr, cons, list (et aussi caaar, cddr, cadaddadr, etc.)

Les Fonctions Primitives II n eq?, null?, list? n =, <>, >, =, <=, even?, odd?, zero?, eqv? n display, newline n define – (define (square x) (* x x)) ou – (define squre (lambda (x) (* x x))) n cond, if (cond ((equal? x 0) #f) (if (equal? x 0) ((> x 5) 5) <> #f (else #t)) #t)

Fonctions de haut niveau I (fonctions qui peuvent etre des arguments) n Example: map n map(f (E1 E2…En))=((f E1) (f E2)…(f En)) ( define ( map f l ) ( if ( null? l ) l ( cons ( f ( car l ) ) ( map f ( cdr l) ) ) ) ) E.g.: (map (lambda (x) (+ x 1)) (1 2 3) ) --> (2 3 4)

Fonctions de haut niveau II (fonctions qui peuvent etre des arguments) Les reducteurs: n Etant donne une fonction binaire f et une constante f0, on veut definire la fonction de haut niveau telle que: (reduit f (E1 E2 … En)) --> (f E1 (f E2 (f … (f En f0) …))) Examples: (E1 E2 … En) --> E1 + E2 + … + En +0 (E1 E2 … En) --> E1 * E2 * … * En * 1 ( define (reduce f f0 1) ( if (null? l ) f0 (f (car l) (reduce f f0 (cdr l))) ) ) E.g.: (reduce + 0 ( ) ) --> 10 (reduce * 1 ( ) ) --> 24