UTNianos

Versión completa: [Aporte] Final de Paradigmas de Programación 21/02/2015
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
¡Espero que les sirva! =D
Bien ahi! yo practique banda de finales y este es el ùnico con el que me re marie con los fucking peloteros, no se no me gustó nada el final, preguntaba siempre qué concepto se usó y era siempre polimorfismo... igualmente aprobe.

Respondo un par de puntos ya que estoy:

1)
a. puedenPasar chicos = filter (\chico-> chico altura>1,1) chicos
b. Esta me costó, yo puse esto : puedenPasar chicos = (filter (>1,1).map altura) chicos
El concepto es aplicación parcial.
c.La primera dada en el enunciado porque es en la que se entiende mejor qué es lo que hace la función a simple vista
d. paja hacerlo, mi solucion en smalltalk era muy parecida a la funcion dada
e. Yo le mande que no habia asignacion destructiva ni efecto de lado
f. El error más grave es considerar el predicado altura/1 como una funcion, después la variable Chico del findall tiene que usarse en la condición del mismo, la lista Chicos nunca la usa y unChico sale de cualquier lado, mi solución fue:
puedenPasar(Chicos,ChicosQuePasan):- findall(Chico, (member(Chico,Chicos),alturaMayor(Chico)),ChicosQuePasan).
y alturaMayor lo hice así: alturaMayor(chico(_,_,Altura)):- Altura>1,1. donde chico(Nombre,Edad,Altura) es un functor y ahi aprovecho el pattern matching.
Te corrijo el punto 1.b: puedenPasar chicos = filter ((>1.1) . altura) chicos
La justificacion esta bien aunque la resolucion no.
El ultimo punto de logico no esta bien que consideres como esta formado el functor del chico, pero la solucion que hiciste esta perfecta =)
Una pregunta:

La solucion del punto 1 d, podria ser asi?

#pelotero
>> puedePasar:unchico
chicos select :[:unChico\ unChico self altura > 1.1]
(23-02-2015 23:30)pollo escribió: [ -> ]Una pregunta:

La solucion del punto 1 d, podria ser asi?

#pelotero
>> puedePasar:unchico
chicos select :[:unChico\ unChico self altura > 1.1]

Hola pollo, ese método no tiene mucho sentido que digamos. En principio, recibe por parámetro "unchico", y el método, por lo que veo, sólo hace un select sobre una colección de chicos. Sin embargo, dentro del select, más precisamente en el predicado que debe cumplirse para ser seleccionado, le mandas el mensaje altura a 'self' (es decir, que el pelotero debería entender el mensaje altura), lo que implica que devuelve un ¿número?, lo comparás con 1.1 y luego le envias a unChico un boolean como mensaje? Fijate bien la precedencia y cómo usar el self.
gracias !!

deberia ser....


#pelotero
>> puedePasar
chicos select :[:unChico\ unChico altura > 1.1]

lo que me devuelve asi es uan coleccion con los que son mayores a esa altura , no¿
Si como lo planteaste esta bien... solo que si vamos a hablar de expresividad seria puedenPasar (ya que devuelve una coleccion y no recibe a un chico y te dice si puede pasar.. un detalle) y que la sintaxis es con pipe (|) y no con \. Y si el enunciado pide que digas los chicos que pueden pasar te estaria faltando retornarlos.
Boludeces que no bajan nota, quedate tranquilo.
(23-02-2015 23:58)pollo escribió: [ -> ]gracias !!

deberia ser....


#pelotero
>> puedePasar
chicos select :[:unChico\ unChico altura > 1.1]

lo que me devuelve asi es uan coleccion con los que son mayores a esa altura , no¿

Ahí sí! Sin embargo, intuyo que la clase 'pelotero' tiene una colección de chicos, es decir, que conoce chicos que podrían o no pasar a un pelotero. Si bien en el enunciado no aclara bien cómo debería ser la referencia, otra opción, también válida, sería que al mensaje 'puedenPasar' le pases por parámetro una colección de chicos que quisieran pasar al pelotero. Ej:

#Pelotero
>> puedenPasar: unosChicos
^ unosChicos select: [chico | chico altura > 1.1]

O bien, si los peloteros NO tuvieran la misma altura máxima, deberías encapsular la obtención de la misma en la clase Pelotero, quedando:

>> puedenPasar: unosChicos
^ unosChicos select: [chico | chico altura > self alturaMax]

Recordá que el '^' hace retornar al objeto en cuestión que, en este caso, es una colección.

Espero haberme explicado bien =)
La coleccion que recibis por parametro en el ejemplo que mencionas no se esta usando... seria la coleccion receptora del mensaje select:
(24-02-2015 12:16)Ivanorr1s escribió: [ -> ]
(23-02-2015 23:58)pollo escribió: [ -> ]gracias !!

deberia ser....


#pelotero
>> puedePasar
chicos select :[:unChico\ unChico altura > 1.1]

lo que me devuelve asi es uan coleccion con los que son mayores a esa altura , no¿

Ahí sí! Sin embargo, intuyo que la clase 'pelotero' tiene una colección de chicos, es decir, que conoce chicos que podrían o no pasar a un pelotero. Si bien en el enunciado no aclara bien cómo debería ser la referencia, otra opción, también válida, sería que al mensaje 'puedenPasar' le pases por parámetro una colección de chicos que quisieran pasar al pelotero. Ej:

#Pelotero
>> puedenPasar: unosChicos
^ unosChicos select: [chico | chico altura > 1.1]

O bien, si los peloteros NO tuvieran la misma altura máxima, deberías encapsular la obtención de la misma en la clase Pelotero, quedando:

>> puedenPasar: unosChicos
^ unosChicos select: [chico | chico altura > self alturaMax]

Recordá que el '^' hace retornar al objeto en cuestión que, en este caso, es una colección.

Espero haberme explicado bien =)

Buenisimo muchas gracias!!

no estaba poniendo en pipe porque no me anda en el teclado ajajaja
En el 1 f) no falta ligar CHICOS?
el findall no es inversible para su segundo argumento.
Buenas! como va?

Estoy haciendo este final y para la parte 2 no se si esta bien lo que puse.. ahi se los paso!

Punto2

a. puedePasar pelotero = filter (\chico -> chico altura > pelotero altura)

b. El impacto que puede obtener sobre la solucion es que se tenga que agregar nuevas clases pelotero que heredan de la clase original Pelotero. De esta forma, cada uno de los peloteros me puede decir la altura maxima..

#PeloteroLunatico (VI: alturaMaxima)
>>getAlturaMaxima
^alturaMaxima * gravedadLunar

#PeloteroAcuatico (VI: alturaMaxima)
>>getAlturaMaxima
^alturaMaxima * presionActual


Me falta para el punto c todo lo que es el codigo en logico (que no me acuerdo ya que la curse hace mucho..) y lo que explicaria es que ambos paradigmas comparten el concepto de polimorfismo..
Y para el punto 3, lo que agregaria es algo asi..

^chicos select: [chico | chico superaAltura 1.1 && chico cumplecondicion]

aunque no se si esta bien y no se que conceptos nuevos se agregar..


Bueno, cualquier sugerencia es bienvenida!

Saludos y gracias!!
URLs de referencia