Final 24/02/2009 (Paradigmas)
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.