Programmation Fonctionnelle Compréhension sur les listes

Documents pareils
Les chaînes de caractères

STAGE IREM 0- Premiers pas en Python

TP 1. Prise en main du langage Python

Découverte de Python

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

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

# let rec concat l1 l2 = match l1 with [] -> l2 x::l 1 -> x::(concat l 1 l2);; val concat : a list -> a list -> a list = <fun>

TP, première séquence d exercices.

Programme Compte bancaire (code)


Présentation du langage et premières fonctions

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Initiation à la programmation en Python

DOCM Solutions officielles = n 2 10.

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

PHP. PHP et bases de données

TP3 : Manipulation et implantation de systèmes de fichiers 1

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

TD3: tableaux avancées, première classe et chaînes

Cours de Programmation Impérative: Zones de mémoires et pointeurs

2.4 Représentation graphique, tableau de Karnaugh

Enoncé et corrigé du brevet des collèges dans les académies d Aix- Marseille, Montpellier, Nice Corse et Toulouse en Énoncé.

Cours d Informatique

Algèbre binaire et Circuits logiques ( )

AC AB. A B C x 1. x + 1. d où. Avec un calcul vu au lycée, on démontre que cette solution admet deux solutions dont une seule nous intéresse : x =

Initiation à la Programmation en Logique avec SISCtus Prolog

Utilisation d objets : String et ArrayList

INF 321 : mémento de la syntaxe de Java

Initiation à LabView : Les exemples d applications :

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

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

Système binaire. Algèbre booléenne

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

Recherche dans un tableau

Solutions du chapitre 4

Algorithmique et Programmation, IMA

OCL - Object Constraint Language

Calcul matriciel. Définition 1 Une matrice de format (m,n) est un tableau rectangulaire de mn éléments, rangés en m lignes et n colonnes.

GOL502 Industries de services

Structures algébriques

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Programmation Orientée Objet Java

Langage Java. Classe de première SI

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

Cours Informatique Master STEP

Exercice 6 Associer chaque expression de gauche à sa forme réduite (à droite) :

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Une introduction à Java

DM 1 : Montre Autoquartz ETA

Vecteurs. I Translation. 1. Définition :

Algorithmique et programmation : les bases (VBA) Corrigé

Apprendre Java en 154 minutes

Lier Erlang avec d autres langages de programmation

Cours d Analyse. Fonctions de plusieurs variables

Accès aux bases de données

Algorithmes récursifs

Cours d initiation à la programmation en C++ Johann Cuenin

Bases de programmation. Cours 5. Structurer les données

ALGORITHMIQUE ET PROGRAMMATION En C

Notions fondamentales du langage C# Version 1.0

Plan du cours Cours théoriques. 29 septembre 2014

Aide mémoire UML & Java 1ère partie : Introduction. marc.lemaire@u-cergy.fr

PROJET ALGORITHMIQUE ET PROGRAMMATION II

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

Introduction au langage C

Programmer en JAVA. par Tama

MPI Activité.10 : Logique binaire Portes logiques

Vision industrielle et télédétection - Détection d ellipses. Guillaume Martinez 17 décembre 2007

Déroulement. Evaluation. Préambule. Définition. Définition. Algorithmes et structures de données 28/09/2009

Glossaire des nombres

CREATION D UNE EVALUATION AVEC JADE par Patrick RUER (

Approche Contract First

Classes et Objets en Ocaml.

Algorithmes et Programmes. Introduction à l informatiquel. Cycle de vie d'un programme (d'un logiciel) Cycle de vie d'un programme (d'un logiciel)

Correction Code nécessaire à la compilation : let bs ="\\" let nl = "\n" ;; let appliquer = List.map ;; (* affichage d'un noeud *)

Cours de C++ François Laroussinie. 2 novembre Dept. d Informatique, ENS de Cachan

Création d objet imbriqué sous PowerShell.

Génie Logiciel I. Cours VI - Typage statique / dynamique, fonctions virtuelles et classes abstraites, flots d entrées / sorties, et string

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

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

Vérification de programmes et de preuves Première partie. décrire des algorithmes

FONCTIONS DE PLUSIEURS VARIABLES (Outils Mathématiques 4)

PROGRAMMER EN MQL4. Apprenez à automatiser vos stratégies sur MetaTrader 4

Plan Pédagogique du cours

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

2 Comment fonctionne un ordinateur, dans les grandes lignes

INF111. Initiation à la programmation impérative en C amini/cours/l1/inf111/ Massih-Reza Amini

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

Plateforme PAYZEN. Définition de Web-services

6. Les différents types de démonstrations

LES GENERATEURS DE NOMBRES ALEATOIRES

Algorithmes et programmation en Pascal. Cours

TP 1 Introduction à Matlab Février 2009

Langage SQL : créer et interroger une base

Cours 7 : Utilisation de modules sous python

Cours d Algorithmique et de Langage C v 3.0

1 radian. De même, la longueur d un arc de cercle de rayon R et dont l angle au centre a pour mesure α radians est α R. R AB =R.

Cours Premier semestre

Transcription:

Programmation Fonctionnelle Compréhension sur les listes Luigi Santocanale LIF, Aix-Marseille Université Marseille, FRANCE 19 septembre 2016

Plan La compréhension La fonction zip

Plan 3/23 La compréhension La fonction zip

Compréhensions ensembliste 4/23 En mathématiques, la compréhension est utilisée pour construire des nouveaux ensembles à partir d ensembles donnés. {x 2 x {1,...,5}} L ensemble {1,4,9,16,25} des tous les nombres x 2 tels que x est un élément de {1...5}.

Compréhensions sur les listes 5/23 En Haskell, une notation similaire est utilisée pour construire des nouvelles listes à partir de listes données. [ x^2 x <- [1..5] ] La liste [1,4,9,16,25] de tous les nombres x 2 tels que x est un élément de la liste [1..5].

6/23 Les générateurs I Remarques : L expression x <- [1..5] est appelée «générateur», car elle explique comment engendrer les valeurs de x. La compréhension peut avoir des générateurs multiples, séparés par des virgules. Par exemple : > [(x,y) x <- [1,2,3], y <- [4,5]] [(1,4),(1,5),(2,4),(2,5),(3,4),(3,5)] Si on change l ordre des générateurs, on change l ordre des éléments dans la liste engendrée : > [(x,y) y <- [4,5], x <- [1,2,3]] [(1,4),(2,4),(3,4),(1,5),(2,5),(3,5)]

7/23 Les générateurs II Les générateurs multiples sont similaires à des boucles imbriquées ; les derniers générateurs correspondent à des boucles plus imbriquées, leurs variables changent plus fréquemment. Par exemple : > [(x,y) y <- [4,5], x <- [1,2,3]] [(1,4),(2,4),(3,4),(1,5),(2,5),(3,5)] x <- [1,2,3] est le dernier générateur, la valeur de x de chaque couple change plus fréquemment.

Générateurs dépendants 8/23 Les générateurs qui suivent peuvent contenir des variables introduites par les générateurs précédents. [(x,y) x <- [1..3], y <- [x..3]] La liste [(1,1),(1,2),(1,3),(2,2),(2,3),(3,3)] de toutes les couples de nombres (x,y) tels que x,y sont des éléments de la liste [1..3] et x < y.

Exemple avec les générateurs dépendants 9/23 En utilisant un générateur dépendant, nous pouvons définir une fonction qui concatène une liste de listes : concat :: [[a]] -> [a] concat xss = [ x xs <- xss, x <- xs ] concat xss est la liste de tous les x où x est tiré de xs, xs est tiré de xss. Par exemple : > concat [[1,2,3],[4,5],[6]] [1,2,3,4,5,6]

Filtres (gardes) 10/23 La compréhension sur les listes peut utiliser des filtres pour restreindre les valeurs produits par les générateurs précédents. [x x <- [1..10], even x] La liste [2,4,6,8,10] de tous les nombres x tels que x est un élément de la liste [1..10] et x est pair.

Exemple avec les filtres 11/23 En utilisant les filtres, on peut définir une fonction qui envoie un entier positif vers la liste des ses facteurs : factors :: Int -> [ Int ] factors n = [ x x <- [1.. n], n mod x == 0 ] Par exemple : > factors 15 [1,3,5,15]

12/23 Un entier positif est premier si ses uniques facteurs sont 1 et lui même. En utilisant factors, nous pouvons définir une fonction qui décide si un nombre est premier : prime :: Int - > Bool prime n = factors n == [1, n] Par exemple : > prime 15 False > prime 7 True

13/23 Avec les filtres, nous pouvons définir une fonction qui retourne la liste de tous les premiers jusqu à une limite donnée : primes :: Int -> [ Int ] primes n = [x x <- [2.. n], prime x] Par exemple : > primes 40 [2,3,5,7,11,13,17,19,23,29,31,37]

Plan 14/23 La compréhension La fonction zip

La fonction zip 15/23 Une fonction importante de Prelude est zip qui mappe deux listes vers une liste de couples d éléments correspondant. zip :: [a] -> [b] -> [(a,b)] Par exemple : > zip [ a, b, c ] [1,2,3,4] [( a,1),( b,2),( c,3)]

16/23 Avec zip nous pouvons définir une fonction qui retourne la liste de toutes les paires d éléments adjacents d une liste : pairs :: [a] -> [(a,a)] pairs xs = zip xs ( tail xs) Par exemple : > pairs [1,2,3,4] [(1,2),(2,3),(3,4)]

17/23 Avec pairs, nous pouvons définir une fonction qui décide si une liste est ordonnée : sorted :: Ord a => [a] -> Bool sorted xs = and [ x < y ( x, y) <- pairs xs ] Par exemple : > sorted [1,2,3,4] True > sorted [1,3,2,4] False

18/23 Avec zip nous pouvons définir une fonction qui retourne la liste de toutes les positions d un valeur dans une liste : positions :: Eq a => a -> [a] -> [ Int ] positions x xs = [ i (x,i) <- zip xs [0.. n], x == x ] where n = length xs - 1 Par exemple : > positions 0 [1,0,0,1,0,1,1,0] [1,2,4,7]

Compréhension sur les chaînes de caractères 19/23 Une chaîne de caractères est une séquence de caractères simples inclus entre doubles guillemets. Par ailleurs, une chaîne est représentée, internement, comme une liste de caractères. signifie " abc " :: String [ a, b, c ] :: [ Char ]

20/23 Les chaînes étant un type spécial de listes, toute fonction polymorphe qui opère sur les listes peut de même opérer sur les chaînes. Par exemple : > length " abcde " 5 > take 3 " abcde " " abc " > zip " abc " [1,2,3,4] [( a,1),( b,2),( c,3)]

21/23 De façon semblable, la compréhension peut opérer sur les chaînes de caractères. Par exemple : une fonction qui compte le nombre de lettres en minuscule dans une chaîne : lowers :: String - > Int lowers xs = length [ x x <- xs, islower x] > lowers " Haskell " 6

Exercices I 22/23 1. Un triplet (x,y,z) d entiers positifs est dit de Pythagore si x 2 + y 2 = z 2. Définissez, en utilisant la compréhension, une fonction pyths :: Int -> [( Int,Int, Int )] qui envoie un entier n vers la listes de tous les triplets de Pythagore avec composantes dans [1..n]. Par exemple : > pyths 5 [(3,4,5),(4,3,5)] 2. Un nombre positif est parfait s il est la somme de tous ses facteurs, sauf lui même. En utilisant la compréhension, définissez une fonction perfects :: Int -> [ Int ]

Exercices II 23/23 qui retourne la liste de tous les nombres parfaits, jusqu à la limite passée en paramètre. Par exemple : > perfects 500 [6,28,496] 3. Le produit scalaire de deux listes d entiers xs et ys de longueur n est la somme des produits des entiers correspondants : n 1 xs ys = i=0 xs i ys i. Utilisant la compréhension, définissez une fonction qui retourne le produit scalaire de deux listes.