Fiche de TD-TP no. 4



Documents pareils
Les structures de données. Rajae El Ouazzani

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

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

INF 232: Langages et Automates. Travaux Dirigés. Université Joseph Fourier, Université Grenoble 1 Licence Sciences et Technologies

ARBRES BINAIRES DE RECHERCHE

Les arbres binaires de recherche

Initiation à la Programmation en Logique avec SISCtus Prolog

Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004

Projet d informatique M1BI : Compression et décompression de texte. 1 Généralités sur la compression/décompression de texte

UFR de Mathématiques et Informatique Année 2009/2010. Réseaux Locaux TP 04 : ICMP, ARP, IP

Algorithmique et Programmation, IMA

INF601 : Algorithme et Structure de données

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

Cours de Master Recherche

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

chapitre 4 Nombres de Catalan

Arbres binaires de recherche

Initiation à l algorithmique

L ARBORESCENCE. Qu est-ce qu un dossier? L arborescence?

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

MIS 102 Initiation à l Informatique

LES TYPES DE DONNÉES DU LANGAGE PASCAL

Étude de l application DNS (Domain Name System)

Resolution limit in community detection

Programmation Par Contraintes

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

STAGE IREM 0- Premiers pas en Python

Fondements de l informatique Logique, modèles, et calculs

Cours de Programmation 2

Jade. Projet Intelligence Artificielle «Devine à quoi je pense»

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

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

Les systèmes de gestion de version

Chapitre 10. Les interfaces Comparable et Comparator 1

Recherche dans un tableau

introduction Chapitre 5 Récursivité Exemples mathématiques Fonction factorielle ø est un arbre (vide) Images récursives

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

# 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>

Chapitre VI- La validation de la composition.

Algorithmique et Programmation Fonctionnelle

Cours 1 : La compilation

1 de 46. Algorithmique. Trouver et Trier. Florent Hivert. Mél : Florent.Hivert@lri.fr Page personnelle : hivert

Bases de données Cours 5 : Base de données déductives

Plan du cours : Zippers. Des fonctions sur les listes avec position. Des fonctions sur les listes avec position

TP 1. Prise en main du langage Python

Classes et Objets en Ocaml.

Langage SQL : créer et interroger une base

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

Programmation Objet - Cours II

Création et Gestion des tables

Cours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions

Créer et modifier un fichier d'import des coordonnées approximatives avec Excel

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

Chapitre 7. Récurrences

UNE EXPERIENCE, EN COURS PREPARATOIRE, POUR FAIRE ORGANISER DE L INFORMATION EN TABLEAU

Débuter avec EXPRESS. Alain Plantec. 1 Schema 2

Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test

Notice d Utilisation du logiciel Finite Element Method Magnetics version 3.4 auteur: David Meeker

Transmission d informations sur le réseau électrique

GOL502 Industries de services

Vérification formelle de la plate-forme Java Card

Logique : ENSIIE 1A - contrôle final

Programmation Orientée Objet Java

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Traduction des Langages : Le Compilateur Micro Java

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

Création d objet imbriqué sous PowerShell.

Encryptions, compression et partitionnement des données

Évaluation et implémentation des langages

Algorithmes d'apprentissage

Approche Contract First

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

1 Recherche en table par balayage

TD de supervision. J.P. Chemla. Polytech Tours Département productique 2ème année

Représentation d un entier en base b

Bases de données - Modèle relationnel

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

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

modules & compilation

Travaux pratiques avec RapidMiner

Cours 1 : Qu est-ce que la programmation?

Certificat Big Data - Master MAthématiques

données en connaissance et en actions?

Informatique Générale

CH.6 Propriétés des langages non contextuels

Java 7 Les fondamentaux du langage Java

TP, première séquence d exercices.

TD 1 - Structures de Traits et Unification

Conception. Génie Logiciel. Renaud Marlet. LaBRI / INRIA (d'après A.-M. Hugues) màj 17/04/2007

OLYMPIADES ACADEMIQUES DE MATHEMATIQUES. 15 mars 2006 CLASSE DE PREMIERE ES, GMF

Premiers Pas en Programmation Objet : les Classes et les Objets

Algorithme. Table des matières

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

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

ALGORITHMIQUE ET PROGRAMMATION En C

Bases de données. Chapitre 1. Introduction

Le langage C. Séance n 4

Transcription:

Master 1 Informatique Programmation Fonctionnelle, p. 1 Fiche de TD-TP no. 4 Exercice 1. Voici trois façons différentes de définir le type Image : type Image = [[ Int ]] data Image = Image [[ Int ]] newtype Image = Image [[ Int ]] Rappelez la différence entre les mots clés type, data, et newtype. A votre avis, quell est la meilleure façon de définir le type Image? Expliquez pourquoi. Exercice 2. Considérez la variante suivante du type récursif des arbres binaires, défini par : data ArbreBin = Feuille Noeud ArbreBin Int ArbreBin 1. Écrivez une expression Haskell, de type ArbreBin, qui représente l arbre 1 2 4 3 2. Dessinez l arbre binaire représenté par a1 dans la définition Haskell a1 = Noeud ( Noeud Feuille 4 Feuile ) 3 ( Noeud ( Noeud Feuille 5 Feuile ) 6 Feuile ) 3. Proposez trois autres expressions Haskell de type ArbreBin et dessinez les arbres qu elles dénotent. 4. Définissez les fonctions suivantes : taille : ArbreBin -> Int maxa : ArbreBin -> Int mina : ArbreBin -> Int compte le nombre des noeuds dans un arbre binaire, l étiquette maximum d un arbre binaire, l étiquette minimum d un arbre binaire. Comment modifier les fonctions maxa et mina si on veut que maxa Feuille = et mina Feuille = +? 5. Un arbre binaire est un arbre de recherche si l étiquette de chaque noeud est plus grande des toutes les étiquettes dans le sous-arbre à gauche, et plus petite des toutes les étiquettes dans le sous-arbre à droite. Définissez un prédicat Haskell arecherche :: ArbreBin -> Bool qui répond vrai à un arbre donné ssi il s agit d un arbre de recherche. 6. Un arbre binaire est équilibré si, pour chaque noeud, la taille du sous-arbre à gauche et celle du sous-arbre à droite différent au plus de 1. Définissez un prédicat Haskell aequilibre :: ArbreBin -> Bool qui répond vrai à un arbre donné ssi il s agit d un arbre équilibré. 7. Est ce que les fonctions arecherche et aequilibre sont performantes? Comment modifier la définition du type arbrebin pour améliorer la performance de ces fonctions? 8. La plus part des algorithmes sur les arbres binaires peuvent se spécifier comme suit :

Master 1 Informatique Programmation Fonctionnelle, p. 2 dans le cas d une feuille, on retourne un valeur donné v ; pour le cas d un noeud, on calcule la valeur de cet arbre à laide d une fonction f de trois arguments : un entier est les deux valeurs calculés de façon récursive avec le sous-arbre à gauche et le sous-arbre à droite. Montrez comment les fonctions taille, maxa et mina, le calcul de la somme de toutes les étiquettes d un arbre, le calcul de l hauteur d un arbre (longueur de la plus longue branche) peuvent se faire/définir selon ce schéma de calcul : qui sont v et f? 9. Définissez une fonction foldarbre :: a -> (a -> Int -> a -> a) -> ArbreBin -> a qui capture le schéma de récursion qu on vient de voir. Exercice 3. Voici une possible déclaration de la classe Set : class Set s where appartient :: Eq a = > a -> s a -> Bool ajouter :: Eq a = > a -> s a -> s a enlever :: Eq a = > a -> s a -> s a pick_one :: Eq a = > s a -> a vide :: s a est_vide :: s a -> Bool union :: Eq a = > s a -> s a -> s a intersection :: Eq a = > s a -> s a -> s a difference :: Eq a = > s a -> s a -> s a Proposez deux types un basé sur les listes, l autre sur les arbres binaires et instanciez cette classe avec ces types.

Master 1 Informatique Programmation Fonctionnelle, p. 3 En TP Dans cette séance de TP nous fairons les premiers pas pour accomplir le projet (voir page web du cours), qui vous demande d implémenter l algorithme d unification. Une signature est un couple S = (Ω, ar) où Ω est un ensemble et ar : Ω N. On dit que Ω est l ensemble des symboles de functions et que, pour f Ω, ar(f) est l arité de f. Soit X un ensemble de variables. L ensemble T S (X) des termes sur la signature S = (Ω, ar) avec variables dans X est défini par induction comme suit : pour x X, x T S (X) ; si f Ω, ar(f) = n, et t 1,..., t n T S (X), alors f(t 1,..., t n ) T S (X) ; rien d autre est un terme. Une substitution est une fonction σ : X T S (X) telle que l ensemble E(σ) = { x X σ(x) x } est fini. Exercice 4. Définissez dans un script Haskell le type des variables, le type des symboles de fonctions, le type d une signature, le type des termes, le type des substitutions. Tous ces types seront des instances de la classe Show (et de la classe Eq, si possible). La difficulté majeure de cet exercice est la définition du type des termes. Pour cela, on peut lire la définition mathématique de l ensemble des termes comme spécifiant qu il y a seulement deux façon pour construire un terme : à partir d une variable, ou bien à partir d un symbole de fonction et d une liste de termes (on fait abstraction de la condition ar(f) = n). Aussi, pour bien définir le type des substitutions, considérez que l ensemble E(σ) est fini, de façon qu une substitution puisse être représentée par un objet fini. Exercice 5. Ajoutez, dans votre script Haskell, la définition d une fonction variables qui calcule les variables qui apparaissent dans un terme. Nous pouvons définir ainsi l application d une substitution σ à un terme t, notée t σ ou tσ, comme suit : x σ := σ(x), f(t 1,..., t n ) σ := f(t 1 σ,..., t n σ). Exercice 6. Ajoutez, dans votre script Haskell, la définition de cet opérateur d application. Enfin, si σ et τ sont des substitutions, nous pouvons définir leur composition, notée τ σ, comme suit : de façon qu on a la loi suivante : (τ σ)(x) := σ(x) τ, x (τ σ) := (x σ) τ. Exercice 7. Ajoutez, dans votre script Haskell, la définition de l opérateur de composition.

Master 1 Informatique Programmation Fonctionnelle, p. 4 Exercice 8. Complétez votre script pour définir un module complet Term.hs selon les spécifications du «listing» suivant : Term module Term ( Var, FuncSymb, Signature, Term, vartoterm, constructterm, variables, sig, Substitution, identity, (*!), (@@) ) where data Var Votre représentation concrète et préférée des variables instance Eq Var instance Show Var data FuncSymb Votre représentation concrète et préférée des symboles de fonctions instance Eq FuncSymb instance Show FuncSymb type Signature = [(FuncSymb, Int)] data Term Nous représentons une signature comme une liste de paires, symbole de fonction plus son arité Le type des termes (dont les variables sont de type v) instance Show Term vartoterm :: Var -> Term Transtypage une variable vers un terme constructterm :: String -> [Term] -> Term Construire un terme à partir d un symbole de fonction et une liste de termes variables :: Term -> [Var] Les variables dans un terme donné sig :: Term -> Signature On récupère la signature d un terme data Substitution Le type des substitutions (avec variables de type v) instance Show Substitution identity :: Substitution La substitution qui envoie x vers x

Master 1 Informatique Programmation Fonctionnelle, p. 5 (*!) :: Term -> Substitution -> Term Application d une substitution à un terme (@@) :: Substitution -> Substitution -> Substitution Composition de substitutions Exercice 9. L implantation du type des variables et du type des symboles de fonction étant assez arbitraire, pouvez vous redéfinir le type de termes en le paramétrant par deux variables de type, v (pour les variables) et f (pour les symboles de fonctions) : data Term v f =...