CI 3641 Lenguajes de Programación Tercer Parcial 2014 Ene Mar pdf
Texto completo
(2) (d) Considere las siguientes definiciones de clases: class A [ int f() [ return 1 ] ]. class B extends A [ int f() [ A x := new C() return 1 + x.f() ] ]. class C extends B [ int f() [ return 3 ] ]. Y considere el siguiente programa: A x := new B() B y := new C() print(x.f() + y.f()) ¿Que i. ii. iii. iv. v.. imprime el programa si el lenguaje usa asociación estática de métodos? 2 3 5 7 No Sabe / No Contesta.. (e) Continuando con la pregunta anterior ¿Que imprime el programa si el lenguaje usa asociación dinámica de métodos? i. 2 ii. 3 iii. 5 iv. 7 v. No Sabe / No Contesta. (f) Considere la misma jerarquı́a de clases de la pregunta anterior y la siguiente firma para una función: fun portero(in x : B, in-out y : B, out z : B) Considere además una llamada de la forma portero(a, b, c) Esta llamada és válida si: i. a ∈ A b∈B c∈C ii. a ∈ B b∈A c∈A iii. a ∈ B b∈B c∈C iv. a ∈ C b∈B c∈B v. No Sabe / No Contesta. (g) Considere que el manejo de excepciones se implementa como una tabla de manejadores estática, entonces siempre es cierto que: i. Hallar el manejador pertinente al ocurrir una excepción toma tiempo logarı́tmico con respecto a la cantidad total de manejadores. ii. Un ejecución que no incurra en excepciones no supone ningún costo adicional en tiempo por la presencia de manejadores. iii. Los manejadores de excepciones pueden anidarse. iv. Todas las anteriores. v. No Sabe / No Contesta.. 2.
(3) (h) Considere una expresión expr en un lenguaje de programación funcional. Entonces siempre es cierto que: i. Evaluar expr usando evaluación normal o evaluación aplicativa puede dar resultados diferentes (sin errores). ii. Si expr es evaluable, la evaluación aplicativa tiene garantizado llegar a tal evaluación. iii. Si expr es evaluable, la evaluación normal alcanzará tal evaluación en menos pasos que la evaluación aplicativa. iv. Ninguna de las anteriores. v. No Sabe / No Contesta. (i) Considere el siguiente programa en Scheme (un dialecto de LISP): (letrec ((f (lambda (n) (if (< n 2) (1) (* n (f (- n 1))))))) (f 3)) Supóngase que se prohı́ben la forma especial letrec. ¿Cual es una posible reescritura válida para el programa anterior? i. (let* ((f (lambda (n) (if (< n 2) (1) (* n (f (- n 1))))))) (f 3)) ii. (let ((g (lambda (n h) (if (< n 2) (1) (* n (h (- n 1))))))) (let ((f (lambda (n) (g n g)))) (f 3))) iii. (let* ((g (lambda (n) (if (< n 2) (1) (* n (g (- n 1)))))) (f (lambda (n) (g n)))) (f 3)) iv. (let ((g (lambda (n h) (if (< n 2) (1) (* n (h (- n 1))))))) (let ((f (lambda (n) (g n f)))) (f 3))) v.. No Sabe / No Contesta.. (j) Considere el siguiente programa escrito en Prolog: p([], Y, Y). p([N|Xs], Y, [N|Zs]]) :- p(Xs, Y, Zs). ¿Cuántas veces unifica exitosamente la consulta p([_|X], Y, [1,2])? i. 0 (el predicado falla). ii. 0 (los argumentos no están suficientemente instanciados). iii. 1. iv. 2. v. No Sabe / No Contesta.. 3.
(4) 1. (12 puntos) Considere el siguiente tipo de datos que representa S–expresiones en Scheme (un dialecto de LISP), junto con las formas especiales let y let*. data S = | | |. Var String Expr [S] LetPar [(String, S)] S LetSeq [(String, S)] S. -----. Variable. S-expresión simple. Let paralelo (let). Let secuencial (let*).. A continuación algunos ejemplos de expresiones en Scheme y sus representaciones con el tipo de datos S. Scheme: (f x y a)} S: Expr [Var "f", Var "x", Var "y", Var "a"] Scheme: (let ((x a) (y b)) (f x y))} S: LetPar [("x", Var "a"), ("y", Var "b")] (Expr [Var "f", Var "x", Var "y"]) Scheme: (let* ((x a) (y x)) (f x y))} S: LetSeq [("x", Var "a"), ("y", Var "x")] (Expr [Var "f", Var "x", Var "y"]) Puede suponer que ninguna asociación esconderá nombres (no existirán huecos en el alcance) y que la expresión suministrada está bien formada. a) (5 puntos) Usted desea realizar un interpretador basado en el tipo de datos S. Sin embargo, se ha dado cuenta que el lenguaje no soporta la forma especial let*. Por lo tanto, debe implementar una función seq2par que reciba una S–expresión general y devuelva una equivalente sin presencia de la forma especial let*. Por ejemplo: seq2par (LetSeq [("x", Var "a"), ("y", Var "x")] (Expr [Var "f", Var "x", Var "y"])) = LetPar [("x", Var "a")] (LetPar [("y", Var "x")] (Expr [Var "f", Var "x", Var "y"]))) b) (7 puntos) Una vez hecha la transformación, procede a implementar el interpretador en cuestión. Debe implementar una función eval que reciba una S–expresión (sin let*) y la evalúe (resuelva todas las ocurrencias en la expresión de la forma especial let). Por ejemplo: eval (LetPar [("x", Var "a")] (LetPar [("y", Var "x")] (Expr [Var "f", Var "x", Var "y"])))) = Expr [Var "f", Var "a", Var "a"] Nota: La evaluación de la expresión dada debe ser normal, no aplicativa. Esto se traduce a evaluar primero los let’s más externos.. 4.
(5) 2. (8 puntos) Se dice que una función está currificada si al evaluarla con un argumento, el resultado es una nueva función (simulando ası́ funciones de varios argumentos). Esto es usual en lenguajes de programación funcionales. Considere el siguiente ejemplo: f x y z = x + y * z g = f 3 h = g 4 n = h 5 Tanto g como h son funciones y, finalmente, n = 23. Se desea que implemente, en Prolog, el predicado eval/3 con el siguiente comportamiento: Sea una llamada a eval(Func, X, NewFunc): Func tiene la forma lambda(Args, Cuerpo), donde Args es una lista con variables no instanciadas y Cuerpo es una expresión aritmética, compuesta únicamente de constantes numéricas y las variables presentes en Args. Por ejemplo: lambda([X, Y, Z], X + Y * Z) X es una constante numérica. Por ejemplo: 3. NewFunc contiene el resultado de evaluar la función con el argumento en X y puede tener una de dos formas: • Tiene la misma forma que Func, si el tamaño de la lista Args es mayor que 1. Por ejemplo: Si Func = lambda([X, Y, Z], X + Y * Z) y X = 3, entonces NewFunc = lambda([Y, Z], 3 + Y * Z) • Es una constante numérica, si el tamaño de la lista Args es 1. Por ejemplo: Si Func = lambda([X], 3 + 4 * X) y X = 3, entonces NewFunc = 23. 5.
(6)
Documento similar
Cedulario se inicia a mediados del siglo XVIL, por sus propias cédulas puede advertirse que no estaba totalmente conquistada la Nueva Gali- cia, ya que a fines del siglo xvn y en
De acuerdo con Harold Bloom en The Anxiety of Influence (1973), el Libro de buen amor reescribe (y modifica) el Pamphihis, pero el Pamphilus era también una reescritura y
Habiendo organizado un movimiento revolucionario en Valencia a principios de 1929 y persistido en las reuniones conspirativo-constitucionalistas desde entonces —cierto que a aquellas
The part I assessment is coordinated involving all MSCs and led by the RMS who prepares a draft assessment report, sends the request for information (RFI) with considerations,
De hecho, este sometimiento periódico al voto, esta decisión periódica de los electores sobre la gestión ha sido uno de los componentes teóricos más interesantes de la
Package Item (Container) Type : Vial (100000073563) Quantity Operator: equal to (100000000049) Package Item (Container) Quantity : 1 Material : Glass type I (200000003204)
D) El equipamiento constitucional para la recepción de las Comisiones Reguladoras: a) La estructura de la administración nacional, b) La su- prema autoridad administrativa
b) El Tribunal Constitucional se encuadra dentro de una organiza- ción jurídico constitucional que asume la supremacía de los dere- chos fundamentales y que reconoce la separación