Documentos de Académico
Documentos de Profesional
Documentos de Cultura
2019-2020
Profesores: Fabio Ortega, Sergio Giraldo, Toni Lunar
Seminario 5
1. Indique los cuatro primeros elementos de cada flujo programado con “thunks”:
a) val a =
let
fun gen x = Stream (x, fn () => gen (x+x))
in
gen 1
end
b) val b =
let
fun gen (a,b) = Stream (a, fn () => gen (a+b,a))
in
gen (1,0)
end
c) val c =
let
fun gen pr =
Stream (hd pr, fn () => gen (tl pr@[hd pr]))
in
gen [8,5]
end
d) val d =
let
fun gen x y = Stream (if x = y then 1 else 0,
fn () => gen ((x+1) mod 2) ((y+1) mod 3))
in
gen 1 2
end
2. Cambie las funciones a continuation passing style. Incluya todas las declaraciones
de tipos:
c) fun composeN 1 f x = f x
| composeN n f x = composeN (n-1) f (f x)
3. Usando la implementación de flujo del ej. 1, escriba una stream que produzca la
secuencia [3, ~9, 27, ~81, …].
4. Usando la implementación de flujo del ej. 1, escriba una stream que produzca la
secuencia [0,1,1,0,2,2,0,3,3,0,4,4,…].
5. Indique el resultado de cada expresión:
fun k x =
let
val aux = (x - 10) * x
in
if aux < 0 then NONE else SOME aux
end
6. Considere la función:
fun mult x y = x * y
fun multlater x y =