final

Anuncio
Optimización Automática de Programas (OAP)
Examen Final —2 de Febrero de 2007—
Ejercicio 1 (Tema 2)
Dadas las siguientes reglas de inferencia de tipos:
0.5 puntos
0
τ `e:t
(Fun) τ ` f : t → t
0
τ ` f (e) : t
(Var) τ [x 7→ t] ` x : t
y el entorno τ = [f 7→ (a → b), g 7→ (c → c), x 7→ IN], donde a, b, c son variables de tipo,
escribe la verificación (paso a paso) de que la sentencia τ ` f (g(x)) : Bool es correcta e
indica que valor deben tener las variables de tipo a, b, c.
Respuesta:
Ejercicio 2 (Tema 3)
Dado el siguiente programa funcional:
0.5 puntos
foo x y z = if x < z then y else z
boh x y
= x + (x ∗ y)
la expresión (foo (boh 2 3) 42 10) se evalúa a 42. Dicha computación se representa en el
λ-cálculo extendido ası́:
(((λ x. λ y. λ z. if x < z then y else z) (((λ x. λ y. x + (x ∗ y)) 2) 3)) 42) 10
Escribe la secuencia de reducciones que llevan al resultado de su evaluación. Indica, para
cada paso, la regla empleada (α, β, δ o condicional, puedes ignorar el resto) y subraya el
subtérmino que se reduce.
Respuesta:
1
Ejercicio 3 (Tema 4)
La siguiente función:
1.5 puntos
f x y = g (h (s x) x) y
se representa mediante la expresión:
(define (f x y) (call g (call h (call s x) x) y))
Dado el entorno τ = (D, S)—es decir, x es dinámica e y es estática—calcula el resultado de
Be [[call g (call h (call s x) x) y]] τ
Escribe la reducción completa y subraya la subexpresión (o subexpresiones) que reduces en
cada paso.
Nota: si en algún punto del desarrollo crees que no es necesario seguir porque el resultado
final ya está completamente determinado, indica el por qué y no es necesario que sigas.
Respuesta:
2
Ejercicio 4 (Tema 4)
La siguiente función:
1.5 puntos
f x y = g (h (s x) x) y
se representa mediante la expresión:
(define (f x y) (call g (call h (call s x) x) y))
Dado el entorno τ = (D, S)—es decir, x es dinámica e y es estática—calcula el resultado de
Bv [[call g (call h (call s x) x) y]] τ g
Escribe la reducción completa y subraya la subexpresión (o subexpresiones) que reduces en
cada paso.
Respuesta:
3
Ejercicio 5 (Tema 4)
Considera las siguientes funciones:
2 puntos
(define (f x y) (if (> x y) then (call g x y) else y))
(define (g x y) (call h x y x))
(define (h x y z) (call h x x x))
junto con el siguiente entorno inicial para la función f: (S, D). Aplica el algoritmo de BTA
completo para calcular la división congruente menos dinámica. Escribe únicamente la secuencia de divisiones—es decir, la lista de valores S/D asociada a cada función—que se
generan en cada iteración del algoritmo.
Respuesta:
Ejercicio 6 (Tema 4)
Escribe la versión anotada de la siguiente función:
1 punto
(define (f x y z) (if (> y z) then (if (= x 1) then x else y)
else (call f (+ x 1) (call g x y) z)))
teniendo en cuenta que la división computada por el BTA es:
div = [f 7→ (S, D, S), g 7→ (S, S)]
Nota: debéis considerar la estrategia de unfolding vista en clase, es decir, sólo se deben
desplegar aquellas llamadas a función en las que todos los argumentos son estáticos. Además,
no es necesario que incluyáis anotaciones con lift.
Respuesta:
4
Ejercicio 7 (Tema 4)
Consideremos el siguiente programa anotado:
2 puntos
(define (f [x,y] []) (ifs (=s x y) then (calld g [x] [y])
else +s x (calls f [-s x 1, y])))
(define (g [x] [y]) (calls h [x,x]))
(define (h [x,y] []) x)
Suponiendo que el valor de los datos estáticos para la función f (es decir, la función inicial)
son [2, 1], computad la evaluación parcial asociada. Concretamente, debéis escribir, para cada
iteración, lo siguiente:
el par (f, vs) seleccionado,
la definición producida (newdef),
el nuevo conjunto de funciones ya especializadas (newmarked) y
el nuevo conjunto de funciones pendientes de especializar (newpending).
Respuesta:
5
Ejercicio 8 (Tema 4)
1 punto
Escribe un programa en el que, pese a que la especialización se realice sin proporcionar
ningún dato estático, el programa especializado sea significativamente más eficiente que el
programa original.
Respuesta:
6
Descargar