• Aucun résultat trouvé

Principes de Programmation TD1

N/A
N/A
Protected

Academic year: 2022

Partager "Principes de Programmation TD1"

Copied!
2
0
0

Texte intégral

(1)

Principes de Programmation TD1

21 janvier 2019

Exercice 1 (Paresse et Listes).

Remarque : cet exercice introduit des structures non (ou mal) vues en cours, il s’agit de les expliquer :

— la définition d’opérateurs,

— la résolution du nom comme une étape de réduction,

— les listes infinies, décrites comme[n..]=n:[n+1..],

— le map,

— les fonctions via un opérateur comme(+2).

1. Que fait l’opérateur(!!)défini dans haskell par :1 (!!) :: [a] -> Int -> a

(x:_) !! 0 = x

(_:l) !! n = l !! (n-1) [] !! _ = undefined

2. Décrivez l’évaluation de[’a’,’b’,’c’,’d’] !! 3.

3. Que font les programmes suivants ? Donner leur évaluation un :: Int

un = un

deux :: Int

deux = (\x -> 2) un

trois :: Int

trois = (\x -> x+2) un

quatre :: Int

quatre = [1, 2, 3, 4] !! 3

cinq :: Int

cinq = [un, 2, 3, 4, 5] !! 4

1. La version de la bibliothèque standard est un peu plus complèxe pour renvoyer de meilleurs message d’erreurs.

1

(2)

six :: Int six = [4..] !! 2

sept :: Int

sept = [2..] !! (-1)

huit :: Int

huit = (+2) ([4..6] !! 2)

neuf :: Int

neuf = [5..9] !! 5

dix :: Int

dix = map (*2) [4..] !! 1

1 Chez soi

Exercice 2 (Typage et Fonctionnel (Bonus)).

Voici lesλ-expressions d’opérateurs existants dans haskell : flip x y z = x z y

id = \x -> x

x || y = if x then x else y False && _ = False

True && x = x

($) = \x -> \y -> x y

(.) = \f -> \g -> \x -> f(g x)

1. Que font ces opérateurs ? 2. Quels sont leurs types ?

3. Quels sont les types des fonctions suivantes : owl = (.) $ (.)

jackpot = ($) . ($) dots = (.) . (.)

swing = flip . (. flip id) bigmap = map ($3)

wtf = map $ ($) 3 4. Que font-elles ?

2

Références

Documents relatifs

N'oubliez surtout pas que si tout n'est pas fait, ce n'est pas grave mais qu'il est essentiel de garder un petit rythme de travail, de garder l'habitude de faire fonctionner

- Ne pas sanctionner les candidats qui ne font pas figurer les guillemets, ou ne mentionnent pas les numéros de lignes, ni les erreurs de copie, ni les erreurs de numérotation.

La programmation peut être définie comme l’action d’utiliser un langage de programmation pour écrire des instructions qui peuvent être exécutées par l’ordinateur dans le but de

des hashs que l’on peut trouver dans les deux fils, pour les feuilles, on prend le hash de l’objet qui s’y trouve.. Pour ça, on utilise la classe Hashable définie par : class

(?) une fonction d’insertion d’un intervalle : on dispose de deux entier (début et fin de l’intervalle) et on doit insérer tous les éléments dans cet intervalle, de

Polymorphisme Les ABRI que l’on a fait ne sont définis que sur les entiers, mais on peut les définir sur n’importe quel type a qui dispose d’un ordre discret (avec prédécesseur

Attention, cette nouvelle fonction de reconnaissance n’est vraiment efficace que si on a accès à plus de coeur de calcul qu’il n’y a d’état dans l’automate... (en pratique un

Quels sont les risques d’une défaillance du système de sécurité de Facebook.