Donar $20 Donar $50 Donar $100 Donar mensualmente
 


Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
[APORTE] final resuelto 01-10-2015 pdep
Autor Mensaje
Bian Sin conexión
Campeon del cubo Rubik
a pig in a cage on antibiotics
****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 195
Agradecimientos dados: 172
Agradecimientos: 244 en 39 posts
Registro en: Dec 2012
Mensaje: #1
[APORTE] final resuelto 01-10-2015 pdep Finales Paradigmas de Programación
Buenas, dejo el final de hoy con toda la resolución! Obviamente algunas cosas en este momento no las voy a explicar tanto como en el final pero bueno (?) ah, dieron 10 min para verlo y si querías te podías ir

Spoiler: Mostrar
PUNTO 1

1) La función recibe algo que le llama pivote que debe ser ordenable o comparable, con el que quiere comparar a los elementos de la lista luego de aplicarles los operadores (que son 3 y tiene ahí en la otra lista), me devuelve una lista de listas en otras palabras con aquellos elementos que cumplían esa condición.
particion :: (Eq a, Ord a) => a -> [a] -> [[a]] obviamente acá a puede ser una lista también (las listas son ordenables y comparables)

2) No es necesario porque estamos aplicando parcialmente filtrarMultiples (la conversión eta me permite hacer esta reducción igual). Haskell entiende (porque tiene inferencia de tipos automática) que según nuestra implementación de filtrarMultiples le está faltando un parámetro. También entra en juego la currificación porque estamos armando una nueva función que recibe sólo un parámetro.

3) a) rompe porque [4] no es un elemento de la lista que le paso
b) funciona
c) rompe porque cuando quiere filtrar los mayores que 3 no deja de hacerlo nunca
d) estamos armando una nueva función que recibe un sólo parámetro. es currificar.
nota: si bien cuando lo prueben en el winghci les va a tirar un error, creo que se puede configurar para que no lo tire no me acuerdo bien igual si hacen :t particion 10 ahí les va a decir que es un funcion que espera 1 parámetro (una lista) y devuelve una lista de listas. obviamente no puse eso en el final porque son boludeces de la consola de haskell (?)
4) tenes composición del lambda con la aplicación del pivote a los operadores, hay menos repetición de código, hay expresiones lambda

PUNTO 2

1) el problema que tenemos acá es que contrajo no nos permite hacer una sola consulta, porque depende de la enfermedad tiene un parámetro de más o de menos entonces ¿? (cero polimorfismo). si hago dos consultas sí me va a devolver lo que quiera pero obvio tengo que saber que una tiene menos parámetros que la otra, en fin es horrible
2) tieneMalaSuerte(Persona):- esPersona(Persona), forall(contrajo(Persona,_,Enfermedad), esPeligrosa(Enfermedad)).

Lo que hice entonces fue hacer nuevos predicados para que haya polimorfismo y todos contentos. Primero que cambié como se modela contrajo

contrajo(Persona,Anio,Enfermedad).

tengo nuevos functores:

bacteriana(Nombre,Resistencia).
viral(Nombre,TardaEnDesaparecer,CelulasQueAfecta).
parasitaria(Nombre,SectorQueAfecta).

esPeligrosa(bacteriana(_,Resistencia)):- Resistencia > 5.
esPeligrosa(viral(_,TardaEnDesaparecer,_)):- TardaEnDesaparecer > 10.
esPeligrosa(viral(_,_,CelulasQueAfecta)):- CelulasQueAfecta > 1000000.

b) aprovechamos el orden superior del forall para poder ser más declarativos al resolver lo que nos pide el requerimiento. también tenemos polimorfismo que lo aprovecha tieneMalaSuerte al no tener que preguntar por cada tipo de enfermedad.

c) es inversible tieneMalaSuerte(Persona) porque llega ligada persona antes del forall, y se fija para CADA UNA si se cumple que todas las que ocntrajo fueron peligrosas.
si no estaba esa persona ligada el motor entiende que para todas las personas todas las enfermedades que contrajeron eran peligrosas y no es lo que queremos.

esPeligrosa(Enfermedad) no es inversible porque hay variables anónimas y no sabe que hacer prolog

3) #Persona vi: nombre, edad, enfermedades
>> tieneMalaSuerte
^ enfermedades allSatisfy: [:enfermedad | enfermedad esPeligrosa].

# Enfermedad -> clase abstracta vi: anio
# Bacteriana hereda de Enfermedad vi: resistencia
>> esPeligrosa
^ resisencia > 5.

# Viral hereda de Enfermedad
>> esPeligrosa
^ tardaEnDesaparecer > 10 or: [celulasQueAfecta > 1000000].

# Parasitaria hereda de Enfermedad
>> esPeligrosa
^ sector = 'interna'

4) tenemos polimorfismo, abstraccion, delegacion, en vez de pattern matching tenemos herencia en objetos, las relaciones de logico en objetos se implementan con una coleccion de enfemredades, en objetos poemos borrar o agregar enfermedades (asignacion destructiva) mientras que en lógico tengo que borrar o agregar un hecho, etc

5) cambie bastante a como estaba antes

#Enfermedad vi: anio, tipo -> es abstracta

# Infecciosa hereda de Enfermedad
>> esPeligrosa: persona // lo redefino a este metodo
^ persona edad between: 3 and: 80
(tambien podia hacer metodos en persona que me digan esBebe y esAnciano, era mas declarativo y expresivo, yo aclaré eso)

# NoInfecciosa hereda de Enfermedad
>> esPeligrosa: persona
^ tipo esPeligrosa: persona


#Tipo es una interface donde todos deben entender esPeligrosa: persona, dejo el codigo como estaba antes. Las que implementan esta interface son Bacteriana Viral y Parasitaria.

b) agregar un nuevo tipo de enfermedad es agregar una nueva clase que implemente el metodo esPeligrosa: persona =)
una nueva categoria es agregarle una subclase a Enfermedad y redefinir su comportamiento

c) se aplicó polimorfismo entre las enfermedades, Persona aprovecha eso en tieneMalaSuerte. También se aplicaron las interfaces y la herencia para reutilizar comportamiento.

Seguramente me haya quedado algo sin poner porque ya me cansé de escribir pero en fin ahí está, den agradecimientos que es gratis (?)


Archivo(s) adjuntos
.pdf  20151001.pdf (Tamaño: 1,39 MB / Descargas: 747)
(Este mensaje fue modificado por última vez en: 02-10-2015 21:11 por Bian.)
02-10-2015 02:00
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] Bian recibio 13 Gracias por este post
c'thun (02-10-2015), Camper (07-12-2015), Vodianisa (17-12-2015), Trisky (17-12-2015), takuma1985 (19-02-2016), maty711 (20-02-2016), SofiCortes (26-02-2016), Andres_utn (27-07-2016), JuanmaCaru (05-10-2016), Arito04 (22-10-2016), nanohueso (22-11-2016), .Victoria (13-12-2016), rompecocos7 (24-02-2017)
c'thun Sin conexión
Militante
Sin estado :(
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 95
Agradecimientos dados: 78
Agradecimientos: 3 en 3 posts
Registro en: Mar 2013
Mensaje: #2
RE: [APORTE] final resuelto 01-10-2015 pdep
Gracias por subirlo, en el 1) pusiste que el pivote debe ser un número, pero puede ser cualquier tipo siempre y cuando se pueda comparar con los elementos de la lista, de hecho en el 3) b) el pivote es un char...
Saludos.
(Este mensaje fue modificado por última vez en: 02-10-2015 18:34 por c'thun.)
02-10-2015 18:12
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Bian Sin conexión
Campeon del cubo Rubik
a pig in a cage on antibiotics
****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 195
Agradecimientos dados: 172
Agradecimientos: 244 en 39 posts
Registro en: Dec 2012
Mensaje: #3
RE: [APORTE] final resuelto 01-10-2015 pdep
Kaiko sí, me confundí al escribir eso cuando llegué, estaba re quemada. de hecho cuando inferí el tipo:
particion :: (Eq a, Ord a) => a -> [a] -> [[a]] obviamente acá a puede ser una lista también (las listas son ordenables y comparables)
puse que a tenía que ser cualquier cosa ordenable y comparable y en ningún momento que tenía que ser de tipo Num ;)

(gracias por avisar, ahí lo cambie)
(Este mensaje fue modificado por última vez en: 02-10-2015 21:12 por Bian.)
02-10-2015 21:10
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
speedy10 Sin conexión
Campeon del cubo Rubik
En camino...
****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 168
Agradecimientos dados: 71
Agradecimientos: 17 en 15 posts
Registro en: Jun 2008
Mensaje: #4
RE: [APORTE] final resuelto 01-10-2015 pdep
A la hora de escribir la consulta en logico (ejercicio 1 punto 2) la consulta se puede hacer, el tema es que queda feo porque tenes que hacer xxx cantidad de consultas por enfermedades... a vos te dijeron en el final que habia que hacer una unica consulta?
14-12-2015 20:28
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
alan_0cool Sin conexión
Empleado de Fotocopiadora
Levantate Hijo de °!"# p...
**

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 27
Agradecimientos dados: 53
Agradecimientos: 15 en 2 posts
Registro en: Sep 2011
Mensaje: #5
RE: [APORTE] final resuelto 01-10-2015 pdep
Hola, como se utiliza el signo $ en Haskell? no recuerdo su uso, muchas gracias
26-07-2016 19:37
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
dezine18 Sin conexión
Militante
Sin estado :(
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 52
Agradecimientos dados: 1
Agradecimientos: 40 en 20 posts
Registro en: Oct 2008
Mensaje: #6
RE: [APORTE] final resuelto 01-10-2015 pdep
La función $, es la función sirve para aplicar una función a un parametro, por lo tanto recibe una función y el parametro que debería aplicarle.

Algunos usos son:


-- notacion infija
even $ 2




-- notacion prefija
($) even 2


26-07-2016 21:12
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Andres_utn Sin conexión
Militante
Sin estado :(
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 56
Agradecimientos dados: 21
Agradecimientos: 0 en 0 posts
Registro en: Apr 2014
Mensaje: #7
RE: [APORTE] final resuelto 01-10-2015 pdep
buenas a todos

en
particion [4] [4,5,7,2] porque no rompe??

no devolveria [[5,7][4],[2]] ?

Gracias saludos
27-07-2016 19:09
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
dezine18 Sin conexión
Militante
Sin estado :(
***

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 52
Agradecimientos dados: 1
Agradecimientos: 40 en 20 posts
Registro en: Oct 2008
Mensaje: #8
RE: [APORTE] final resuelto 01-10-2015 pdep
Si que rompe, el tipo de [4] no es el mismo tipo que el tipo de los elementos de la lista [4,5,7,2].


[4] :: Num a => [a]
[4,5,7,2] :: Num b => [b], por lo tanto el tipo de uno de los elementos es Num b => b

Por lo tanto [a] \= b
27-07-2016 20:56
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




Usuario(s) navegando en este tema: 1 invitado(s)



    This forum uses Lukasz Tkacz MyBB addons.