Final 22/12/2014 (Paradigmas)

De Cuba-Wiki

1) Extender el cálculo Lambda con referencias para que soporte cosas del tipo . Te dejaba usar un for'(M|M') como auxiliar.

Aximoas de tipado:

Semántica operacional:


Esto es porque si reducimos entonces siempre va a evaluar a lo mismo y o no corre o no termina el for.

Algoritmo de inferencia

(falta ver que los tipos de la misma variable en distintos contexto sean el mismo tipo y que i sea de tipo ref Nat en y .

2) Escribir en prolog la función esCamino(+Path,+Graph,+NodoInicial) donde Graph es lista de ejes.

esCamino([N],G,N).

esCamino([A,B|C],G,A) :- member((A,B),G), esCamino([B|C],G,B).

3) ¿Es tipable foldr map? ¿Qué representa foldr map?

foldr :: (a -> b -> b) -> b -> [a] -> b map :: (a->b) -> [a] -> [b]

Entonces podemos reemplazar por

foldr :: ((a->a) -> [a] -> [a]) -> [a] -> [a->a] -> [a] map :: (a->a) -> [a] -> [a]

y foldr map va a tener tipo [a] -> [a->a] -> [a]

El resultado de foldr map va a ser aplicarle las funciones de la lista [a->a] una atrás de la otra (como foldr) a los elementos de la lista [a] (como map).

Por ejemplo, foldr map [0,1] (+1,+2,+3) va a hacer [0,1] -> [1,2] -> [3,4] -> [6,7].



Eso es lo que me tomó a mí, a algunos les tomó Curry y Uncurry (dar las funciones, los tipos de las mismas, dar ejemplos), también les tomó algo parecido al de for pero con árboles binarios que tenían un tipo en los nodos internos y otro en las hojas, por ejemplo: Bin A B := Hoja A | Nodo B (Bin A B) (Bin A B).

También tomó algo de resolución bastante sencillo por lo que me dijeron y algo de armar un árbol de Prolog.