• Aucun résultat trouvé

S´erie d’exercices #4 IFT-2035 4.1 Renommage

N/A
N/A
Protected

Academic year: 2022

Partager "S´erie d’exercices #4 IFT-2035 4.1 Renommage"

Copied!
2
0
0

Texte intégral

(1)

S´erie d’exercices #4

IFT-2035

4.1 Renommage α

Soit le code ci-dessous qui est ´ecrit en Haskell et utilise donc la port´ee lexicale:

λx -> λy ->

let f = λx -> x + 2 in let g x = λg -> f (g x) in let g (x, f) = f x

in λf -> g (x, f)

Renommer toutes les variables (e.g. en y ajoutant un 0, 1, 2, ...) pour que chaque variable ait un nom diff´erent des autres. Bien sˆur ce renommage ne doit pas changer la s´emantique du code.

4.2 Structure de donn´ ees fonctionelle

Soit le type suivant en Haskell qui d´efinit un arbre binaire que l’on peut utiliser pour repr´esenter une table associative (qui associe des cl´es de type Int `a des valeurs de typeβ):

data TreeMap b = Empty | Node Int b (TreeMap b) (TreeMap b) L’exercice est de d´efinir les op´erations typiques sur une telle structure de donn´ee.

Bien sˆur, pour ˆetre utile l’arbre doit ˆetre maintenu dans l’ordre: toutes les cl´es dans la branche de gauche d’un Node doivent ˆetre plus petites que la cl´e du noeud, et vice versa pour la branche de droite.

Il y a trois op´erations:

ˆ tmLookup: rechercher la valeur associ´ee `a une cl´e pass´ee en param`etre.

ˆ tmInsert: ajouter une entr´ee (donn´ee sous la forme d’une cl´e et de sa valeur) dans la table.

ˆ tmRemove: enlever une entr´ee (dont la cl´e est pass´ee en param`etre).

Ces fonctions doivent ˆetre totales (elles terminent toujours et ne doivent jamais signaler d’erreur).

1. Donner le type de ces trois fonctions.

1

(2)

2. Donner une liste, aussi concise et compl`ete que possible, d’axiomes formels auxquels ces op´erations doivent ob´eir. E.g. un de ces axiomes formalisera le fait qu’un tmLookup d’une cl´e xjuste apr`es un tmInsert de la mˆeme cl´e avec une valeurv devrait trouverv. La forme exacte d´ependra de vos choix au point 1, mais cela pourrait ressembler `a:

∀x, .., v. tmLookup (tmInsert .. x v).. x = v

3. Donner le code des trois fonctions.

Pour rendre l’exercice plus utile, il est important de faire ces ´etapes dans l’ordre:

i.e. ne pas ´ecrire le code avant d’avoir d´ecid´e du type des fonctions et de leurs sp´ecifications.

4.3 Tracer la port´ ee

Soit le code suivant dans un langage hypoth´etique dont la syntaxe est la mˆeme que celle de Haskell:

letx= 2

f1 y=z+x+y f2 x=f1 (x+ 1) f3 z=f2 (z+ 2) in f3 5

Montrer les ´etapes de l’´evaluation dans chacun des deux cas: le cas o`u le langage utilise la port´ee dynamique et le cas o`u il utilise la port´ee statique. De mˆeme avec l’exemple suivant:

letm f [] = []

m f (x:xs) =f x:m f xs i= 4

in m(λx→x+i) [2,3]

Utiliser une notation bas´ee sur des environnements d´enot´es {x17→v1, x27→v2, ...}.

2

Références

Documents relatifs

Les r´ eponses doivent ˆ etre ´ ecrites sur une feuille s´ epar´ ee.. Les r´ esultats ´ ecrits sur la feuille de donn´ ees ne seront pas

R´ esoudre les probl` emes suivants en utilisant la notation

Toutes les autres questions n’ont qu’une seule r´ eponse juste; si plusieurs r´ eponses sont valides, s´ electionner la plus restrictive (par exemple s’il est demand´ e si 0

Q.21 La r´ esolution de la surcharge n´ ecessite la connaissance du type des contenants.. la connaissance du type

les instanciations de templates sont faites ` a l’ex´ ecution tandis que les liaisons de m´ ethodes virtuelles sont faites ` a la compilation.. les instanciations de templates et

les instanciations de templates sont faites ` a l’ex´ ecution tandis que les liaisons de m´ ethodes virtuelles sont faites ` a la compilation.. les instanciations de templates et

les instanciations de templates sont faites ` a l’ex´ ecution tandis que les liaisons de m´ ethodes virtuelles sont faites ` a la compilation.. les instanciations de templates et

les instanciations de templates sont faites ` a l’ex´ ecution tandis que les liaisons de m´ ethodes virtuelles sont faites ` a la compilation`. les instanciations de templates et