Final 22/12/2014 (Paradigmas)

De Cuba-Wiki
Revisión del 06:03 23 dic 2014 de Ltaravilse (discusión | contribs.) (Página creada con «1) Extender el cálculo Lambda con referencias para que soporte cosas del tipo <math>for(i:=M_1|M_2|M_3)</math>. Te dejaba usar un for'(M|M') como auxiliar. Aximoas de tip...»)
(difs.) ← Revisión anterior | Revisión actual (difs.) | Revisión siguiente → (difs.)

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].