Final 03/03/2022 (Paradigmas)

De Cuba-Wiki

Funcional

1. Definir fold sobre árbol binario

2. Usar ese fold para definir

truncar10:: ArbolBinario Int -> ArbolBinario Int

Ejemplos:

truncar10 (Hoja n) = Hoja n
truncar10 (Bin 1 (Hoja 2) (Hoja 5)) = Hoja (1+2+5)
truncar10 (Bin 4 (Hoja 5) (Hoja 2)) = (Bin 4 (Hoja 5) (Hoja 2))

Es decir, agrupa recursivamente nodos que con sus hijos suman menos de 10

Cálculo Lambda

3. Se puede definir un árbol binario infinito? Qué pasaría cuando le aplicas truncar10

4. Por qué correctitud = progreso + preservación? (intuición)

5. Pasa algo si se cambia el orden de las reglas de evaluación de la aplicación? (primero se evalúa el parámetro a un valor, después la función a un valor, después se hace la aplicación)

6. Qué propiedad se pierde al agregar referencias? Qué pasa con la propiedad de progreso?

Lógico

7. Explicar la regla de resolución de primer orden

8. Se puede unificar en un paso?

{P(a, f(X)), P(X,Y)}   {~P(a,X)}

9. Soluciones de s(X) en este programa con cut:

s(X):- p(X).
s(0).

p(X) :- q(X).
p(1).

q(X):- r(X),!.
q(2).

r(3).
r(4).

Cálculo Sigma

10. Se pierde o gana alguna propiedad al traducir cálculo lambda en cálculo sigma?

11. Se puede evaluar una función sin pasarle un parámetro?