Final 14/10/2008 (Paradigmas)

De Cuba-Wiki

Plantilla:Back

Ejercicio 1

Tipar "map map" sabiendo que

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

Respuesta

Comenzamos con el "map" de más adentro

Luego para tipar "map map" usamos la regla de la aplicación

entonces

Ejercicio 2

Explicar el concepto de Currificación y dar un ejemplo

Respuesta

Ejercicio 3

Hacer inferencia de tipos sobre ( \x \y -> x (y x) )

Respuesta

W(\x \y -> x (y x))= 
      {}> \x:t3->t5 \y:(t3->t5)->t3  -> x (y x) :t3->t5)->(((t3->t5)->t3)->t5
Si
  W(\y -> x (y x))={x:t3->t5} > \y:(t3->t5)->t3 -> x (y x) :((t3->t5)->t3)->t5
  Si
    W(x (y x))=S({x:t4}) U S({y:t2->t3,x:t2}) > S(x (y x) : S(t5)
              ={x:t3->t5, y:(t3->t5)->t3 } > x (y x) : t5
    Si
      S2=MGU{t4=t3->t5}U{t2=t4}= {t4<-t3->t5,t2<-t3->t5} t5 fresca
      W(x)    = {x:t4}> x:t4
      W((y x))=S({y:t1}) U S({x:t2}) > S(y x) :S(t3)
              = {y:t2->t3,x:t2} > y x : t3 
      Si
        S=MGU{t1=t2->t3}={t1<-(t2->t3)}  t3 fresca 
        W(y)={y:t1}>y:t1
        W(x)={x:t2}>x:t2

Ejercicio 4

Escribir en Prolog los predicados que determinan una una lista es sublista de otra y el que obitnene la raiz de un árbol binario.

Respuesta

sublista([],_).

sublista(S,L) :- sublista_inicial(S,L).

sublista([S|SS],[L|LS]) :- sublista([S|SS],LS).


sublista_inicial([],_).

sublista_inicial([S|SS],[L|LS]) :- S == L, sublista_inicial(SS,LS).


Voy a suponer que los arboles se forman con "nil" y "bin(izq, v, der)"

raiz(bin(_, V, _), V).

Ejercicio 5

Explicar tipos polimórficos

Respuesta

Ejercicio 6

Explicar las reglas de subtipado para funciones.

Respuesta