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
[Paradigmas] [Resolución] Final 03/12/2011
Autor Mensaje
leandrong Sin conexión
Secretario de la SAE
...
******

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 454
Agradecimientos dados: 108
Agradecimientos: 186 en 28 posts
Registro en: Sep 2008
Mensaje: #1
[Paradigmas] [Resolución] Final 03/12/2011 Finales Paradigmas de Programación
Chicos:

https://docs.google.com/document/d/10Hxp...edit?pli=1

Acá está el final de Paradigmas del 03/12/2011. Lo resolví pero no sé si está del todo bien. Si me pueden dar una mano se los agradecería:

Punto 1.
a.-
En tieneMuchosPaisajes hay asignación destructiva en
1) pai := true;
2) pai := false

Pai comienza en true, y en caso de que no haya un paisaje que no sea lindo cambiar el valor a false.

En escultural hay asignación destructiva en
1) cantMuseos := 0.
2) cantMuseos := cantMuseos + ciudad museos size

Se utiliza para acumular la cantidad de Museos que hay en un Tour.

b.-
tieneMuchosPaisajes
^self ciudades allSatisfy: [ :unaCiudad | unaCiudad tieneLindosPaisajes].

esCultural
^ (self ciudades inject: 0 into: [ :acum :ciudad |acum + ciudad museos size ]) > self ciudades size.

c.- Considerando los métodos nuevos del punto b, al no haber asignación destructiva se asegura que no haya efecto de lado dentro de cada método pero si consideramos los métodos viejos del punto a hay asignación destructiva por lo que se observa que hay efecto de lado dentro de cada método.

d.- El concepto lo encuentro en el metodo "tienePlaya". Aqui puedo observar que los objetos polimorficos tour y ciudad entienden el mensaje "tienePlaya".

e.-
Tour>> leCopaA: unaPersona
^ (unaPersona gustos allSatisfy: [:unGusto | unGusto = #Cultura ifTrue:[self esCultural ] or: unGusto = #Paisajes ifTrue: [self tieneMuchosPaisajes ] or: unGusto = #Playa self tienePlayas]).

Lo que habría que cambiar es que ahora gustos en vez de ser un sólo, tendría que ser una colección de gustos (que podría, obviamente contener uno solo)

f.-

>>Persona(VC: gustos)
teCopa: unTour
^(self gustos allSatisfy :[unGusto | unGusto teSatisface: unTour ].

La persona es quien sabe si le gusta o no un tour. Por lo que se delega la responsabilidad a la persona.
>>Cultura
teSatisface: unTour
^(unTour escultural)

>>Paisajes
teSatisface: unTour
^(unTour tieneMuchosPaisajes)

>>Playa
teSatisface: unTour
^(unTour tienePlays)

Se crea una clase por cada tipo de gusto, y de esta forma se puede usar polimorfismo en el método teCopa: de la clase Persona, ya que gustos es una colección de los 3 tipos de gustos (Cultura,Paisajes y Playa) y los tres entienden el mensaje “teSatisface:”

g.-

En primer lugar, hay una mejor delegación de responsabilidades, ya que no es responsabilidad del Tour saber si a una Persona le gusta dicho Tour, sino que es responsabilidad de la persona. Por otra parte el uso de polimorfismo permite que se puedan agregar nuevos gustos sin tener que modificar el código del programa (en el propuesto había que agregar más condiciones) ya que con sólo agregar el nuevo gusto sería suficiente lo dota a esta solución de mayor extensibilidad (posibilidad de agregar nuevos gustos) y mantenibilidad (facilidad de agregarlo).


Punto 2.

a.- Hay aplicación parcial en

snd.buscaren promedioPuntos

Porque map/2 recibe una función y una lista. En este caso la función es buscaren/2 que tiene dos parámetros, pero ya tiene aplicado uno de sus parámetros (promedioPuntos) y el otro sería cada elemento de la lista equipo.

equipoGroso equipo =(sum. map (snd . buscaren promedioPuntos)) equipo >=100

Sin la aplicación parcial, no podría realizarse la función, ya que es necesario que cada elemento de la lista equipo sea buscado en la lista de promedioPuntos para poder llevar acabo el map y así obtener una nueva lista con solamente los jugadores del equipo deseado.

b.- En Haskell se usa en las funciones map y filter. Tanto en map como en filter, se obtiene una lista, en este ejemplo, en el map consigue la lista de puntos del equipo, y el filter una lista con la tupla de un jugador.

En Prolog se usa en el predicado findall. La ventaja radica en que permite armar una lista con los puntos de todos los jugadores del equipo a través de un solo predicado.
De no existir este concepto, en ambos lenguajes no habría forma de formar las listas.

c.-En Prolog se puede preguntar si existe algún equipo que sea groso gracias al concepto de inversibilidad:

?- equipoGroso(X).
false.

Mientras que en Haskell no se puede ya que no posee inversibilidad.

d.- En Prolog, si bien la resolución del ejercicio es bastante expresiva, se la podría aumentar al crear nuevos predicados:

equipoGroso(Equipo):-
listaPtsEquipo(Equipo,ListaPts),
sumlist(ListaPts, TotalPts),
TotalPts >= 100.

listaPtsEquipo(Equipo,ListaPts):-
findall(Pts, jugadorPts(_,Equipo,Pts), ListaPts).

jugadorPts(Jug,Equipo,Pts):-
jugador(Jug, Equipo),
promedioPuntos(Jug, Pts).

Por el contrario en Haskell, hay muy poca expresividad, por lo que sería necesario crear nuevas funciones para aumentarla.

spurs = ["ginobili", "duncan"]
bulls = ["rose","deng"]
promedioPuntos = [("ginobili", 24), ("duncan", 33),("rose",60),("deng",45)]

equipoGroso equipo = totalPuntos equipo >=100

totalPuntos = sum. map (puntos.buscaren promedioPuntos)

buscaren listaJugadores jugador = (head.filter ((==jugador).apellido)) listaJugadores

apellido = fst
puntos = snd
29-02-2012 16:37
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
paulita Sin conexión
Empleado del buffet
:)
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 22
Agradecimientos dados: 14
Agradecimientos: 1 en 1 posts
Registro en: Mar 2010
Mensaje: #2
RE: [Paradigmas] [Resolución] Final 03/12/2011
2)a)yo agregaría La ventaja es que se crean funciones con diferente cantidad de argumentos. Dependiendo de la cantidad de argumentos que paso obtengo una funcion o un valor resultante (si mando todos los argumentos) puedo dejar sin pasar un argumento y usarlo como una funcion de un map (como en este caso)....
Otra ventaja es que te ahorras de escribir funciones auxiliares usando funciones que ya tenias definidas.

2)c)
?- equipoGroso(X).
Esa consulta te devuelve los equipos grosos...pusiste false por la base de conocimiento que tenemos?? si ..porque no hay ningún groso en realidad, pero yo pondría que podes preguntar con variables sin ligar y que te devuelva todos los que cumplen con el predicado si hubiese alguno en la base para explicar la inversibilidad...ponele.


esta bastante parecido a lo que resolvi yo. el ultimo punto es re goma, que no jodan no sirve para nada!.
29-02-2012 17:06
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
leandrong Sin conexión
Secretario de la SAE
...
******

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 454
Agradecimientos dados: 108
Agradecimientos: 186 en 28 posts
Registro en: Sep 2008
Mensaje: #3
RE: [Paradigmas] [Resolución] Final 03/12/2011
(29-02-2012 17:06)paulita escribió:  2)a)yo agregaría La ventaja es que se crean funciones con diferente cantidad de argumentos. Dependiendo de la cantidad de argumentos que paso obtengo una funcion o un valor resultante (si mando todos los argumentos) puedo dejar sin pasar un argumento y usarlo como una funcion de un map (como en este caso)....
Otra ventaja es que te ahorras de escribir funciones auxiliares usando funciones que ya tenias definidas.

2)c)
?- equipoGroso(X).
Esa consulta te devuelve los equipos grosos...pusiste false por la base de conocimiento que tenemos?? si ..porque no hay ningún groso en realidad, pero yo pondría que podes preguntar con variables sin ligar y que te devuelva todos los que cumplen con el predicado si hubiese alguno en la base para explicar la inversibilidad...ponele.

esta bastante parecido a lo que resolvi yo. el ultimo punto es re goma, que no jodan no sirve para nada!.

Me gusto lo que agregaste del 2)a).

Con respecto al 2.c, lo hice agregando equipos grosos, y el resultado de:
?- equipoGroso(X)
true.

Devuelve si existe algún equipo groso o no.

Medio raro porque supuestamente cuando ponés una variable, te tiene que dar los resultados que ligan con esa variable.
29-02-2012 19:43
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
leandrong Sin conexión
Secretario de la SAE
...
******

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 454
Agradecimientos dados: 108
Agradecimientos: 186 en 28 posts
Registro en: Sep 2008
Mensaje: #4
RE: [Paradigmas] [Resolución] Final 03/12/2011
Para que devuelva los equipos que son groso habría que hacer Generación creando un equipo/1 o usar el predicado jugador/2.

Así:

equipoGroso(Equipo):-
jugador(_,Equipo),
findall(Pts, (jugador(Jug, Equipo), promedioPuntos(Jug, Pts)), ListaPts),
sumlist(ListaPts, TotalPts),
TotalPts >= 100.

Lo malo de esto es que te devuelve un resultado por cada jugador del equipo groso, lo mejor sería:

equipoGroso(Equipo):-
equipo(Equipo),
findall(Pts, (jugador(Jug, Equipo), promedioPuntos(Jug, Pts)), ListaPts),
sumlist(ListaPts, TotalPts),
TotalPts >= 100.
(Este mensaje fue modificado por última vez en: 29-02-2012 23:23 por leandrong.)
29-02-2012 23:14
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
CarooLina Sin conexión
Colaborador
2016! ❥
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 3.466
Agradecimientos dados: 920
Agradecimientos: 1.220 en 454 posts
Registro en: Sep 2010
Mensaje: #5
RE: [Paradigmas] [Resolución] Final 03/12/2011
Una consulta, esto no tiene asignacion destructiva:

esCultural
^ (self ciudades inject: 0 into: [ :acum :ciudad |acum + ciudad museos size ]) > self ciudades size.

acum le van pisando valores, yo use:

un collect y a eso size

love
14-02-2013 16:28
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
rod77 Sin conexión
Presidente del CEIT
:o
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.021
Agradecimientos dados: 117
Agradecimientos: 343 en 149 posts
Registro en: Mar 2011
Mensaje: #6
RE: [Paradigmas] [Resolución] Final 03/12/2011
(14-02-2013 16:28)CarooLina escribió:  Una consulta, esto no tiene asignacion destructiva:

esCultural
^ (self ciudades inject: 0 into: [ :acum :ciudad |acum + ciudad museos size ]) > self ciudades size.

acum le van pisando valores, yo use:

un collect y a eso size

la asignación destructiva que existe es: "cantMuseos := 0", por lo tanto lo que tenes que hacer es quitar eso.
Usando una coleccion como 'INJECT', quita la asignación destructiva, por lo tanto esta bien.

El collect como lo hiciste ?
19-02-2013 13:51
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
CarooLina Sin conexión
Colaborador
2016! ❥
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 3.466
Agradecimientos dados: 920
Agradecimientos: 1.220 en 454 posts
Registro en: Sep 2010
Mensaje: #7
RE: [Paradigmas] [Resolución] Final 03/12/2011
(19-02-2013 13:51)rod77 escribió:  
(14-02-2013 16:28)CarooLina escribió:  Una consulta, esto no tiene asignacion destructiva:

esCultural
^ (self ciudades inject: 0 into: [ :acum :ciudad |acum + ciudad museos size ]) > self ciudades size.

acum le van pisando valores, yo use:

un collect y a eso size

la asignación destructiva que existe es: "cantMuseos := 0", por lo tanto lo que tenes que hacer es quitar eso.
Usando una coleccion como 'INJECT', quita la asignación destructiva, por lo tanto esta bien.

El collect como lo hiciste ?


Lo encontré en la lista de pdp que se puede usar ese inject no sabia la verdad, por eso pregunte. Pero eso lo encontré después y me olvide de venir acá y corregir.
Y si "ciudad museos" devuelve una colección, seguro leí cualquier cosa y por eso puse eso. En vez de collect utilizaría un gather y ahora si el size.

love
19-02-2013 14:51
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
leandrong Sin conexión
Secretario de la SAE
...
******

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 454
Agradecimientos dados: 108
Agradecimientos: 186 en 28 posts
Registro en: Sep 2008
Mensaje: #8
RE: [Paradigmas] [Resolución] Final 03/12/2011
(14-02-2013 16:28)CarooLina escribió:  Una consulta, esto no tiene asignacion destructiva:

esCultural
^ (self ciudades inject: 0 into: [ :acum :ciudad |acum + ciudad museos size ]) > self ciudades size.

acum le van pisando valores, yo use:

un collect y a eso size

Punto 1.
a.-
En tieneMuchosPaisajes hay asignación destructiva en
1) pai := true;
2) pai := false

Pai comienza en true, y en caso de que no haya un paisaje que no sea lindo cambiar el valor a false.

En escultural hay asignación destructiva en
1) cantMuseos := 0.
2) cantMuseos := cantMuseos + ciudad museos size

Se utiliza para acumular la cantidad de Museos que hay en un Tour.

b.-
tieneMuchosPaisajes
^self ciudades allSatisfy: [ :unaCiudad | unaCiudad tieneLindosPaisajes].

esCultural
^ (self ciudades inject: 0 into: [ :acum :ciudad |acum + ciudad museos size ]) > self ciudades size.
19-02-2013 21:15
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
CarooLina Sin conexión
Colaborador
2016! ❥
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 3.466
Agradecimientos dados: 920
Agradecimientos: 1.220 en 454 posts
Registro en: Sep 2010
Mensaje: #9
RE: [Paradigmas] [Resolución] Final 03/12/2011
pero a que viene tu respuesta? Yo estaba en duda si el injec into tenia asignacion destructiva

love
19-02-2013 21:34
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
leandrong Sin conexión
Secretario de la SAE
...
******

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 454
Agradecimientos dados: 108
Agradecimientos: 186 en 28 posts
Registro en: Sep 2008
Mensaje: #10
RE: [Paradigmas] [Resolución] Final 03/12/2011
(19-02-2013 21:34)CarooLina escribió:  pero a que viene tu respuesta? Yo estaba en duda si el injec into tenia asignacion destructiva

La respuesta era la solución del ejercicio que había puesto yo, por ahí no la habías visto.

Yo tuve la misma duda en su momento, es una asignación destructiva "interna" que a uno no le interesa cómo se realiza, por eso no se toma como tal.
(Este mensaje fue modificado por última vez en: 19-02-2013 21:52 por leandrong.)
19-02-2013 21:52
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
CarooLina Sin conexión
Colaborador
2016! ❥
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 3.466
Agradecimientos dados: 920
Agradecimientos: 1.220 en 454 posts
Registro en: Sep 2010
Mensaje: #11
RE: [Paradigmas] [Resolución] Final 03/12/2011
(19-02-2013 21:52)leandrong escribió:  
(19-02-2013 21:34)CarooLina escribió:  pero a que viene tu respuesta? Yo estaba en duda si el injec into tenia asignacion destructiva

La respuesta era la solución del ejercicio que había puesto yo, por ahí no la habías visto.

Yo tuve la misma duda en su momento, es una asignación destructiva "interna" que a uno no le interesa cómo se realiza, por eso no se toma como tal.

Ahora si=)
Si la verdad es que lo leí todo ante de comentar y justo después unos días leyendo la lista eso que vos decís también lo dicen! =) gracias=)

love
19-02-2013 22:22
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
leandrong Sin conexión
Secretario de la SAE
...
******

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 454
Agradecimientos dados: 108
Agradecimientos: 186 en 28 posts
Registro en: Sep 2008
Mensaje: #12
RE: [Paradigmas] [Resolución] Final 03/12/2011
(19-02-2013 22:22)CarooLina escribió:  
(19-02-2013 21:52)leandrong escribió:  
(19-02-2013 21:34)CarooLina escribió:  pero a que viene tu respuesta? Yo estaba en duda si el injec into tenia asignacion destructiva

La respuesta era la solución del ejercicio que había puesto yo, por ahí no la habías visto.

Yo tuve la misma duda en su momento, es una asignación destructiva "interna" que a uno no le interesa cómo se realiza, por eso no se toma como tal.

Ahora si=)
Si la verdad es que lo leí todo ante de comentar y justo después unos días leyendo la lista eso que vos decís también lo dicen! =) gracias=)

En el final tratá de EXPLICAR todo aunque sean cosas obvias. A ellos le gusta saber que entendiste. =)
20-02-2013 01:04
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
CarooLina Sin conexión
Colaborador
2016! ❥
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 3.466
Agradecimientos dados: 920
Agradecimientos: 1.220 en 454 posts
Registro en: Sep 2010
Mensaje: #13
RE: [Paradigmas] [Resolución] Final 03/12/2011
(20-02-2013 01:04)leandrong escribió:  
(19-02-2013 22:22)CarooLina escribió:  
(19-02-2013 21:52)leandrong escribió:  
(19-02-2013 21:34)CarooLina escribió:  pero a que viene tu respuesta? Yo estaba en duda si el injec into tenia asignacion destructiva

La respuesta era la solución del ejercicio que había puesto yo, por ahí no la habías visto.

Yo tuve la misma duda en su momento, es una asignación destructiva "interna" que a uno no le interesa cómo se realiza, por eso no se toma como tal.

Ahora si=)
Si la verdad es que lo leí todo ante de comentar y justo después unos días leyendo la lista eso que vos decís también lo dicen! =) gracias=)

En el final tratá de EXPLICAR todo aunque sean cosas obvias. A ellos le gusta saber que entendiste. =)

dale! =) rindo el sabadoo

love
20-02-2013 09:47
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
nanjiro Sin conexión
Campeon del cubo Rubik
Sin estado :(
****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 126
Agradecimientos dados: 149
Agradecimientos: 46 en 16 posts
Registro en: Mar 2010
Mensaje: #14
RE: [Paradigmas] [Resolución] Final 03/12/2011
buenas gente, pregunto aca porque creo que no vale la pena crear un thread para esto:


Off-topic:
saben si para el final de pdp se puede tener la hoja comparativa con las funciones basicas de cada lenguaje?


gracias!
21-02-2013 12:28
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
rod77 Sin conexión
Presidente del CEIT
:o
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.021
Agradecimientos dados: 117
Agradecimientos: 343 en 149 posts
Registro en: Mar 2011
Mensaje: #15
RE: [Paradigmas] [Resolución] Final 03/12/2011
(21-02-2013 12:28)nanjiro escribió:  buenas gente, pregunto aca porque creo que no vale la pena crear un thread para esto:


Off-topic:
saben si para el final de pdp se puede tener la hoja comparativa con las funciones basicas de cada lenguaje?


gracias!

si, lo podes tener.
Si no me equivoco, en diciembre actualizaron la que se encontraba en http://www.pdep.com con un par de funciones nuevas. Asi que si tenes una vieja, te recomiendo que te fijes de nuevo
21-02-2013 12:38
Envíale un email Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
[-] rod77 recibio 1 Gracias por este post
nanjiro (21-02-2013)
Buscar en el tema
Enviar respuesta 




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



    This forum uses Lukasz Tkacz MyBB addons.