UTNianos

Versión completa: [Aporte] Final Paradigmas de Programacion 19/12/2015
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Buenas, aporto el final del sábado 19/12. Saludos!
Alguien tiene la resolucion de este final?
Me sumo al pedido!
Tengo dudas en cuanto a la parte C, alguno sabe como resolver la parte 1.b,c y 2?
Hola, aca resolvi la parte A pero no estoy seguro si esta bien. Que alguien más lo resuelva por favor.

link
Buenas adjunto la parte B y C.

Aclaro que acepto correcciones, tengo que dar el final el sabado.

Parte B)

1) F en el funcional no hay asignación destructiva, ni efecto colatera, pero si se podia hacer una funcion donde una persona juegue un juego y mostrar como queda, despues del mismo.

2) Tipo

fun :: Ord a => Int -> (Int ->[a] -> Bool) -> (a -> a) -> a -> [a] -> [a]

3)
fun 1 (<) (+1) 10 [1..] no se evalua por errores de tipo ya que espera tipo a y recibe tipo [a]

fun 1 (\x y -> x<0) (+1) 10 [1..] se evalua y termina adecuadamente, entra por el otherwise y retorna [1]

fun 1 (\x y -> x>0) even 10 [1..] no se evalua por errores de tipo ya que even devuelve un bool y espera un tipo a

fun 1 (\x y -> x>0) (+1) 10 [1..] se evalua pero no termina retorna [2,3,4,5,6,7,8,9,10 pero no llega a finalizar ya que no termina nunca de evaluar dentro de la funcion lampda fun 1 (\x y -> x>0) even 10 [1..] donde y seria un valor de la lista.

fun 1 no se evalua por error de tipo ya que faltan parametros entre ellos la lista. (aca no se bien si es eso u otra cosa).


Parte C)

1) a) F no se hace uso de Polimorfismo ya que no es optimo el uso de todoslosmetroscasa/1 y todoslosmetrodepartamento/1, donde si estuviese bien utilizado el polimorfismo la misma funcion todoslosmetros/1 serviria para ambos casos, delegando la implementacion de cada caso.

b) F no son inversibles ya que el findall no es inversible y no hay unificacion que lo haga inv, unificando los metros.

c) Aca tenia muchas dudas porque es declarativa, aunque se podria delegar el union/3 y el max_member/2 en expresiones mas claras. (No se bien como contestar estas preguntas me parecen super ambiguas.)

2) propiedadMasGrande(Metros) :- susMetros(Metros), todosLosMetros(Viviendas), max_member(Metros, Viviendas).

todosLosMetros(Viviendas) :- findall(Metros,susMetros(Metros),Viviendas).
susMetros(Metros) :- propiedades(_,_,casa(Metros)).
susMetros(Metros) :- propiedades(_,_,departamento(_,Metros)).


La Parte A me quedo casi igual que la de alan.


Saludos

Andrés
Se que ha pasado bastante de este final, pero como estoy preparandome para el final, empece por este y hay un par de cosas para la parte B que lo rewsolvi distinto..
Estas son mis respuestas para las funciones..

fun 1 (<) (+1) 10 [1..] --- Error de tipo, porque el (<) espera un valor para evaluar y no una lista.. :t (<) => a -> a -> Bool

fun 1 (\x y -> x<0) (+1) 10 [1..] se evalua y termina adecuadamente, entra por el otherwise y retorna [1]

fun 1 (\x y -> x>0) even 10 [1..] se evalua pero no termina, porque la salida por la primera guarda resulta una lista infinita.. [False,True,False,True..]

fun 1 (\x y -> x>0) (+1) 10 [1..] se evalua pero no termina.. idem anterior, es una lista infinita.. [2,3,4,5,6,7,8,9,10,...

fun 1 --- se evalua y termina adecuadamente, ya que es una funcion parcialmente aplicada..


Cualquier cosa me corrigen!!
Saludos!!
URLs de referencia