Final 03/03/2022 (Paradigmas)
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?