Final 24/02/2009 (Paradigmas)

De Cuba-Wiki

Plantilla:Back

Ejercicio 1

Tipar map map y explicar que significa.

Ejercicio 2

Para una variante del "try...catch" que es "try M1,...,Mn with N" dar tipado, semantica e inferencia (inferencia solo para el caso n=2).

Funciona igual que el "try...catch" comun pero evalua los M de izq a der, si se encuentra un raise se pasa al manejador y si todos funcionan ok se devuelve el valor del Mn (el ultimo).

Ejercicio 3

Explicar S-Arrow porque funciona como funciona

Ejercicio 4

Explicar las formulaciones ingenuas de las reglas de subtipado para REF, mostrar casos de falla para c/u.

Respuesta:

a) Si tomamos Ref covariante, falla al escribir: Ejemplo: Bool <: Int entonces según la regla Ref Bool <: Ref Int pero el término

let x = Ref True in x := 3

tipa y falla. x debe ser "Ref de Int", la regla dice que puedo usar "Ref de bool" entonces tipa.

b) Si tomamos Ref contravariante, falla al leer: Ejemplo: Bool <: Int entonces según la regla Ref Int <: Ref Bool pero el término

let x = Ref 3 in (if !x then ... else ...)

tipa y falla. en "!x" se espera "Ref Bool", la regla dice que puedo usar "Ref Int" entonces tipa.