Programmation Fonctionnelle Avancée – Master 1 TP 1

publicité
Programmation Fonctionnelle Avancée – Master 1
TP 1
Mehdi Dogguy
– Tous les sujets de TP seront disponibles à cette adresse :
http://www.pps.jussieu.fr/~dogguy/?page=teaching/pfa
– Les lignes commençant par (?) sont des indications.
Exercice 1 :
Configuration d’Emacs
Emacs dispose d’un mode Haskell qui porte le nom haskell-mode. Il faut
dire à Emacs comment charger correctement le mode en vous aidant du code qui
se trouve à l’adresse suivante :
http://is.gd/haskell el
Ajoutez le contenu de ce fichier à la fin de votre .emacs (et rechargez ce
dernier). Ce mode fournit quelques fonctions utiles que l’on va découvrir tout
au long de ce TP.
(?) Le raccourci clavier C-c C-h permet de découvrir la liste des raccourcis
clavier définis par le mode chargé.
Exercice 2 :
Listes
Écrivez les fonctions suivantes sur les listes et donnez leur équivalent dans
le prélude de Haskell :
– appliquer :: (c -> d) -> [c] -> [d] qui prend en argument une
fonction f et une liste l et qui retourne la liste où tous les éléments ont
été tranformés avec f.
– concatener :: [z] -> [z] -> [z] qui concatène deux listes.
– longueur :: [a] -> Int qui calcule la longueur d’une liste.
– somme :: [Int] -> Int qui calcule la somme des éléments d’une liste.
Proposez une implémentation de somme qui utilise foldl.
– combiner :: (a -> b -> c) -> [a] -> [b] -> [c] qui combine les
éléments de deux listes avec la fonction donnée en premier argument.
(?) La documentation de Prelude.hs est disponible à cette adresse
http://is.gd/Prelude hs.
(?) Le raccourci clavier C-c C-l permet de charger le fichier ouvert dans le
mode interactif de Haskell.
Exercice 3 :
Perroquet
Voici un programme qui imprime ce qu’il lit sur son entrée standard :
main : : IO ( )
main = interact ( \ x −> x )
On peut compiler ce programme et obtenir un exécutable Exo1 de la manière
suivante :
$ ghc --make -fwarn-missing-signatures -Werror Exo1.hs
Dans la suite, implémentez chacune des transformations demandées et recompilez votre programme :
1. Remplacez la fonction anonyme par une fonction définie localement.
Vérifiez que votre programme fait toujours la même chose.
2. Transformez ce programme pour qu’il affiche le nombre de lignes lues.
3. Affichez le nombre de caractères par ligne.
4. Affichez le nombre de caractères par ligne (sans les espaces).
5. Affichez le nombre de caractères lus au total.
6. Affichez, au maximum, 80 caractères par ligne.
7. Reformattez le texte lu sur 80 colonnes.
(?) C-c M-/ affiche interactivement la signature de l’identifiant pointé par
le curseur.
(?) C-c C-t demande à la boucle interactive d’afficher le type de l’identifiant
pointé par le curseur.
Exercice 4 :
List comprehensions
1. Trouver la somme des entiers inférieurs à 1000 dont le carré est impair.
2. Trouver la liste des entiers n inférieurs à 100000 qui satisfont l’équation
suivante : (n+2)2 = (n+1)2 + n2 .
3. Trouver la liste des entiers premiers inférieurs à 200.
4. Trouver la somme des multiples de 3 et 5 qui sont inférieurs à 100.
Téléchargement