Está en la página 1de 3

(24294) Diseño Funcional de Programas

2019-2020
Profesores: Fabio Ortega, Toni Lunar, Sergio Giraldo
Seminario 4

1. a) Escriba una declaración con “datatype”, de un árbol que tenga 4 hijos en cada
nodo.

b) Declare una variable t con su “datatype” que contenga el árbol abajo:

"a"
"e"
"b"
"o"
"u"

2. Las declaraciones abajo definen un árbol que representa alguna expresión de


números reales:

datatype ex = V of real | F1 of (real -> real) * ex


| F2 of (ex * (real * real -> real) * ex)

val exp1 = F2 (V 4.0, (fn (x:real,y:real) => x + y), F1


(fn (x:real) => x * x, V 2.0))

a) Dibuje el árbol de exp1.

b) Si aplicamos las funciones de cada nodo de exp1 a sus hijos, ¿cuál será la
expresión aritmética que resulta?

c) Declare un valor exp2 que represente el cálculo de - (3.0 * 5.0)


d) Complete la función que lee el árbol en pre-orden calculando la expresión:

fun calc (V x):_____ = _____


| calc (F1 (f, ex)) = f (calc ex)
| calc (___ (ex1, f, ex2) = ___ (calc ___, _______)

3. Considere la implementación de Stream como escrita abajo:

signature STREAM =
sig
type 'a s
val head: 'a s -> 'a
val tail: 'a s -> 'a s
val make: 'a * ('a -> 'a) -> 'a s
end

structure S:>STREAM =
struct
type 'a s ='a * ('a -> 'a)
fun head (x,f) = x
fun tail (x,f) = (f x,f)
fun make (x,f) = (x, f)
end

En cada apartado, indique los valores que serán vinculados a cada variable y explique
que secuencia de números el flujo str produce.

a) val str = S.make (1, fn x => x + 2)


val a1 = S.head str a1 = _______
val a2 = S.head (S.tail str) a2 = _______
val a3 = S.head (S.tail (S.tail str)) a3 = _______

¿Qué es str?

b) val str = S.make (1, fn x => ~x)


val a1 = S.head str a1 = _______
val a2 = S.head (S.tail str) a2 = _______
val a3 = S.head (S.tail (S.tail str)) a3 = _______

¿Qué es str?

c) val str = S.make (0, fn x => (x + 1) mod 4)


val a1 = S.head str a1 = _______
val a2 = S.head (S.tail str) a2 = _______
val a3 = S.head (S.tail (S.tail str)) a3 = _______

¿Qué es str?
4. Escriba una función que calcula el enésimo elemento de un flujo. Use la
implementación del ejercicio anterior.

fun nth (str:'a S.s, n:int):'a =

5. Defina un flujo que genera todos los números naturales y otro que genera todos los
naturales pares. Use la implementación del ej. 3.

6. Evalúe la expresión de val b con el modelo de sustitución y explique lo que hace


la función cl.
datatype 'a st = Stream of 'a * (unit -> 'a st)

fun next (Stream (v,t):'a st) = t ()

fun cl ((x::l):'a list):'a st =


Stream (x, fn () => cl (l@[x]))

val b = next (cl [1,2,3])

También podría gustarte