• Aucun résultat trouvé

S´erie d’exercices #5 IFT-2035 October 5, 2021

N/A
N/A
Protected

Academic year: 2022

Partager "S´erie d’exercices #5 IFT-2035 October 5, 2021"

Copied!
3
0
0

Texte intégral

(1)

S´erie d’exercices #5

IFT-2035 October 5, 2021

5.1 Ordre et Port´ ee

D´efinir dans un langage fonctionnel hypoth´etique une fonction qui renvoie:

• 0 si le langage utilis´e ob´ei la port´ee statique et l’appel par valeur

• 1 si le langage utilis´e ob´ei la port´ee statique et l’appel par nom

• 2 si le langage utilis´e ob´ei la port´ee dynamique et l’appel par valeur

• 3 si le langage utilis´e ob´ei la port´ee dynamique et l’appel par nom

5.2 Une classe de conteneurs

Soit la classe de types suivante:

class Conteneur a where size :: a→Int subset :: a→a →Bool reverse :: a→a

O`u reverserenvoie un conteneur dont les ´el´ements sont dans l’ordre inverse.

1. Donner une d´efinition pour l’instanceInteger(on n’utilisera pas les nom- bres n´egatifs), o`u chaque bit repr´esente la pr´esence du nombre correspon- dant, donc 11 = 20+ 21+ 23repr´esente l’ensemble{0,1,3}.

2. Donner une d´efinition pour l’instance[Int]. Pour vous aider vous pouvez utiliser la fonction pr´ed´efinieelem :: Eq a ⇒ [a] → [a] → Bool.

3. Donner une d´efinition pour l’instanceMaybe a, qui ne peut contenir qu’un

´

el´ement au maximum.

Rappel: data Maybe a = Nothing | Just a 4. Donner le type des fonctions suivantes:

sizes xs = map size xs size2 x y z = if x == z

then let s = size x in (s, s) else (size x, size y)

minsize x y = if subset x y then size x else size y

1

(2)

5.3 Evaluateur ´

type Var = String

-- Expressions du code source en forme ASA.

data Exp = Enum Int -- Une constante

| Evar Var -- Une variable

| Elambda Var Exp -- Une fonction

| Ecall Exp Exp -- Un appel de fonction -- Valeurs renvoy´ees.

data Val = Vnum Int -- Un nombre entier

| Vfun Var Exp -- Une fonction elookup x ((x1,v1):env) =

if x == x1 then v1 else elookup x env eval env (Enum n) = Vnum n

eval env (Evar x) = eval (elookup x env) eval env (Elambda arg body) = Vfun arg body eval env (Ecall fun actual) =

case eval env fun of

Vfun formal body -> eval ((formal,actual):env) body Soit les d´eclarations ci-dessus utilis´ees pour un interpr´eteur:

1. Donner le type des deux fonctions. V´erifier que le code est typ´e correcte- ment et corriger les ´eventuelles erreurs.

2. Cet ´evaluateur implante-t-il l’appel par valeur ou par nom?

Indiquer quelle partie du code vous indique clairement la r´eponse.

Le changer pour qu’il implante l’autre genre de passage d’arguments.

3. Cet ´evaluateur implante-t-il la port´ee lexicale ou dynamique?

Indiquer quelle partie du code vous indique clairement la r´eponse.

Le changer pour qu’il implante l’autre genre de port´ee.

Points bonus:

• Discuter de l’influence de l’ordre d’´evaluation de Haskell sur vos r´eponses aux points 1 et 2. Comment faut-il changer ce code pour que l’´evaluateur reproduise les r`egles de port´ee utilis´ees par le langage Haskell (i.e. que votre ´evaluateur implante la port´ee dynamique si Haskell utilisait la port´ee dynamique, et qu’il implante la port´ee statique si Haskell utilisait la port´ee statique).

• Entre le code fourni, celui obtenu pr`es le point 2, et celui obtenu apr`es le point 4, vous avez 3 variantes parmi les 4 combinaisons possibles. Com- ment faut-il changer le code pour obtenir la combinaison manquante?

2

(3)

5.4 R´ ecursion par les types

Dans leλ-calcul non-typ´e, le combinateur Y peut ˆetre utilis´e pour d´efinir des fonctions r´ecursives:

Y =λf →(λx→f (x x)) (λx→f (x x)) propri´et´e: Y f f (Y f) On peut alors d´efinir

fact’ factx=if x <2then 1elsex∗(fact (x−1)) fact=Y fact’

Cependant, il est impossible de d´efinirY dans leλ-calcul typ´e, et de mˆeme Haskell rejette la d´efinition de Y.

1. Montrer quel probl`eme se pose pour donner un type `aY.

2. Contourner le probl`eme de mani`ere `a d´efinir en Haskell une fonction fact qui calcule la factorielle d’un nombre, mais sans utiliser de fonction r´ecursive.

3

Références

Documents relatifs

Calculer la transform´ ee de Fourier des distributions temp´ er´ ees sur R associ´ ees aux fonctions suivantes :1. D´ eduire de la question pr´ ec´ edente la valeur de la constante

Calculer la transform´ ee de Fourier des distributions temp´ er´ ees sur R associ´ ees aux fonctions suivantes

Lorsque le paquet aura ´ et´ e trait´ e par chaque processus, les valeurs des compteurs seront somm´ ees par l’un des processus, qui d´ ecidera de la poursuite ou non

Der Lindy 5 Port HDMI 18G Switch ist eine kompakte und hochwertige Lösung zum bequemen Umschalten zwischen fünf HDMI- Quellgeräten, die mit einem Display verbunden sind.. Der

[r]

´ Ecrire la fonction optimize qui va essayer de simplifier une expression en ´ eliminant toutes les multiplications par 1 et 0, ainsi que les additions ` a

Introduction.- En langage C, l’acc`es ` a un ´el´ement d’un tableau peut se faire classiquement par le nom du tableau accompagn´e d’un index, mais aussi par un pointeur

— Mode 0 Dans ce mode, le 8255 se comporte comme trois ports simples, chacun des quatre ports A, B, CL et CU pouvant ˆetre programm´e comme entrant ou sortant.. — Mode 1 Les ports A