Está en la página 1de 3

(24294) Diseño Funcional de Programas

Octubre 2019
Profesores: Fabio Ortega, Toni Lunar, Sergio Giraldo
Seminario 1

1. Marque tres puntos importantes en el análisis de expresiones por el


interpretador del lenguaje:

a) Sintaxis: como se escribe la expresión


b) Validad de tipos: que tipos son permitidos en subexpresiones, y que tipo
se produce al final
c) evaluación: como se ejecuta la expresión como parte de un programa
d) terminación: si la expresión concluye su computación.

2. Cual debe ser el tipo de e1 en la expresión:

if e1 then e2 else e3

a) int
b) bool
c) string
d) hay un error de tipos, luego no lo tiene definido

Suponga que e1 tiene tipo int y e2 tiene tipo bool. En ese caso, ¿cual debe ser
el tipo de e1 + e2?

a) int
b) bool
c) string
d) hay un error de tipos, luego no lo tiene definido

3. Explica la sintaxis, las reglas de verificación de tipo y las reglas de


evaluación para comparaciones de “menor que” (<).

4. ¿Cual de eses errores no es una preocupación cuando se hace debug de


programas en SML?
a) Compatibilidad de binarios.
b) Errores de sintaxis
c) Incompatibilidad de tipos
d) Errores semánticos

5. Cual valor se atribuye a la variable a tras la ejecución del código?

val x = 12;
val n = 2 + x;
val x = n -14;
val n = n * x;
val b = if n = x then 8 else 5;
val a = if b = 5 then x else b;

6. Dada la siguiente definición de una función “swap”:

fun swap (pr: int*bool) =


(#2 pr, #1 pr)

a) Explique en pocas palabras como funciona la función.

b) ¿Sería posible usar la función swap ya hecha en la definición de la


siguiente función sort_pair?

fun sort_pair(pr : int*int)


if (#1 pr) < (#2 pr)
then (#1 pr, #2 pr)
else (#2 pr, #1 pr)

7. Tuplas anidadas: ¿Cual es el tipo de ans abajo?

val x = (3,(4,(5,6)));
val y = (#2 x,(#1 x, #2(#2 x)));
val ans = (#2 y, 4);

8. ¿Cual es la cola (tail) de una lista de un solo elemento? En otras palabras,


¿cual es el valor de x abajo?

val x = tl [9];

a) Esto genera una excepción; la lista no tiene cola.


b) La lista vacía [].
c) 9.
d) Esa operación no está definida.

9. ¿Como se accede al tercer elemento (que en ese caso es igual a 6) de la


lista asignada a x, usando llamadas a hd y a tl?

val x= [5,1,6,8];

a) val el = hd x;
b) val el = hd(tl x);
c) val el = tl(tl x);
d) val el = hd (tl (tl x));

10. Dada una función de lista:

fun sum_list (xs : int list) =


if null xs
then 0
else hd xs + sum_list(tl xs)

Escribe otra función que recibe una int list y devuelve un int tras
multiplicar todos los elementos de la lista. Esa función se debe llamar
list_product y comportarse como abajo:

val x = list_product[]; (*1*)


val y = list_product[5]; (*5*)
val z = list_product[2,4,2]; (*16*)

11. Dada la siguiente definición de función:

fun pow (x : int, y: int) =


if y = 0
then 1
else x * (pow (x, y-1))

¿Que pasaría si y es negativa? Para ese ejercicio, supongamos que un int


puede ser infinitamente grande en valor positivo o negativo, lo que significa que
no hay overflow (lo que no es verdad en SML).

12. Cual de las siguientes no es una manera legal de llamar a la función pow:

a) val ans = pow(2,3)


b) val ans = pow (2,3)
c) val ans = pow 2,3
d) val x = (2,3)
val ans = pow x

13. Cuando una definición de función es encontrada por el interpretador, el


cuerpo de la función es evaluado.

a) cierto
b) cierto, pero solo para funciones que reciben argumentos numéricos.
c) falso, excepto cuando la función está definida en una solo línea
d) falso

También podría gustarte