• Aucun résultat trouvé

Majeure M1 Cours Langages de Programmation COMPOSITION D’INFORMATIQUE

N/A
N/A
Protected

Academic year: 2022

Partager "Majeure M1 Cours Langages de Programmation COMPOSITION D’INFORMATIQUE"

Copied!
2
0
0

Texte intégral

(1)

Majeure M1 Cours Langages de Programmation COMPOSITION D’INFORMATIQUE

Jean-Jacques L´evy 5 D´ecembre 2000, 3h

Avertissement On attachera une grande importance `a la clart´e, `a la pr´ecision, `a la concision de la edaction. Seules les notes de cours sont autoris´ees.

Question 1 Variables libres et li´ees.

a) Soit M = (λf.λg.λx.gx+ 3)(λx.x+ 4)(λy.x+y). Est-ce quef,g,x,y sont libres dansM? b) Calculer M[f\g], M[g\f], M[x\x+y],M[y\x+y].

c) Calculer la valeur de (λf.λg.λx.λy.M)I J3 2 1 avec I =λx.x,J = λx.2 en expliquant tous les pas ´el´ementaires de calcul.

Question 2 On consid`ere PCF avec les listes et la fonctionnellefoldR2 telle que

foldR2 f(a1 ::a2· · ·::an::nil)(b1 ::b2· · ·::bn::nil)c=f a1b1(f a2b2(· · ·(f anbnc))) (n≥0) a) Exprimer foldR2 en PCF.

b) D´eterminer son type en appliquant rigoureusement les r`egles de typage de PCF.

Question 3 Un appel de fonction est d´epli´e (inlining) quand son invocation est remplac´ee par la substitution des arguments dans son corps de fonction: (λx.M)N remplac´e par M[x\N].

a) Pr´ecisez quand cette op´eration est valide.

b) Quels sont les avantages et les inconv´enients du d´epliage.

Question 4 R´ecursion

a) Exprimer letrecx=M inN en PCF. Exprimerµx.M en fonction de letrec. b) Donner une r`egle de r´eduction pourletrec.

c) On rajoute une constante Y `a PCF telle que Y M →M(Y M). Exprimer µx.M en fonction de Y et de M.

d) Montrer queY est d´ej`a exprimable par une expression bien typ´ee de PCF.

e) Quelle est la valeur de (λf.µx.f x)(λy.2)?

Question 5 On consid`ere PCF sans r´ef´erences, ni objets, mais avec les listes et les tableaux.

a) Quels sont les sh´emas de types des tableaux [|nil|] et [|λx.x|], et des fonctionsλx.x[0] et λx.λy.x[0]←y. Peut-on g´en´eraliser les variables de type de ces termes?

b) Les d´ebordements de tableaux sont-elles les seules erreurs possibles `a l’ex´ecution? Montrer que les tableaux ne v´erifient pas le th´eor`eme de progression?

c) Donner une r`egle de typage pour les tableaux qui permette d’exprimer les algorithmes de tri sur les tableaux comme des fonctions de type polymorphe, et qui v´erifie le th´eor`eme de progression.

1

(2)

Question 6 On rajoute les exceptions `a PCF. On ´etend l’ensemble des termes par:

M, N, P ::= . . .

| fail exception lev´ee

| tryM withN gestionnaire de l’exception

Le terme tryM withN calcule M sauf si fail est ex´ecut´e dansM, auquel cas il renvoieN. a) Un contexte est un terme C[ ] avec un trou (sous-terme manquant). Et C[M] d´esigne le terme obtenu en mettant M `a la place du trou. Un contexte est actif si son trou est en position ´evaluable. Ainsi C[ ] = [ ]2 ou C0[ ] = (λx.x)(2 + [ ]) sont des contextes actifs; mais C[ ] = (λx.[ ])M n’en est pas un (puisqu’on ne calcule pas `a l’int´erieur d’une valeur).

Donner les r`egles de r´eduction pour calculer tryM with N avec l’aide d’un ensemble de con- textes actifs soigneusement d´efinis.

b) Rajouter les exceptions `a l’espace des valeurs V. Donner la s´emantique bigstep pour ` tryM withN =V.

c) Donner sa r`egle de typage, ainsi que celle pour le termefail.

d) Quelles modifications doit-on faire `a l’algorithme W pour tenir compte de cette nouvelle instruction.

e) On donne maintenant un argument `a fail, qu’il est plus judicieux d’appeler maintenant failwith. Ainsi l’espace des termes est

M, N, P ::= . . .

| failwith M exception lev´ee

| tryM withN gestionnaire de l’exception

Alors l’instruction tryM with λx.N renvoie N[x\V] si failwithV est ex´ecut´e dans M. Recommencer les questions pr´ec´edentes avec cette nouvelle construction.

f) Donner une piste pour construire un syst`eme de type plus robuste?

Question 7 Codage des entiers unaires avec les objets dans PCF (sans les constantesnenti`eres).

a) On repr´esente les entiers par un objet `a trois champs:

0 = {est zero=true; pred =ζx. . . .; succ=ζx. . . .} n+1 = {est zero=false; pred =ζx. . . .; succ=ζx. . . .}

Donner une expression possible pour les deux m´ethodespred etsucc donnant le pr´ed´ec´esseur et le successeur de tout entier naturel. (On posera true = 0 et true = 1 pour obtenir des termes de corrects de PCF en l’absence de bool´eens).

b) Donner un codage (toujours dans les objets non-modifiables) qui minimise le nombre d’objets cr´e´es.

2

Références

Documents relatifs

Modifier le programme de l’exercice 2 pour qu’il pr´esente un menu initial (utiliser l’instruc- tion switch) permettant de : i) Saisir les informations sur le personnel (exercice 2)

Pour un algorithme donn´e prenant en entr´e en tableau, nous noterons a n et c n le nombre de lectures/´ecritures et comparaison dans le pire des cas lorsque le tableau est de

2/ Dans ce deuxième programme, il s’agit de remplir un tableau de chiffres de 3 colonnes et 4 lignes avec les valeurs saisies dans le champ texteEdit. A chaque clic, on passe à

2/ Dans ce deuxième programme, il s’agit de remplir un tableau de chiffres de 3 colonnes et 4 lignes avec les valeurs saisies dans le champ texteEdit. A chaque clic, on passe à

Car en effet, le type des bornes d’un tableau n’influe aucunement sur le type des variables contenues dans le tableau.. Et r´ eciproquement, le type des variables d’un tableau

Delia Kesner et Giovanni Bernardi IRIF, Université Paris-Diderot. Emails : kesner@irif.fr

 Dans un tableau associatif, chaque élément est référencé Dans un tableau associatif, chaque élément est référencé explicitement par un indice appelé clé de type

Sur l'écran, un point est l'équivalent d'un pixel localisé dans la fenêtre de visualisation par deux axes de coordonnées, x et y.. correspondant respectivement à la largeur