UTNianos

Versión completa: Final Paradigmas de Programación 13/12/14
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Páginas: 1 2
Oooo, trece del doce del catorce.
comparado con los anteriores me parecio bastante mas facil. Clave un 5 porque bardie con haskell (sobretodo eso de las consultas).
A mi me rompió todo en el de los tipos de la función. Frutie como el mejor.
Yo clavé un 6. Me parece que frutié con lo de las consultas de haskell y el A-3 no lo hice.
La parte de objetos era fácil.
Lo del tipo de fmagia recién lo chequié y lo hice casi perfecto.

Yo hice:
fmagia :: (Num a, Ord a) => a -> (a -> a -> a) -> a -> [a] -> Bool

Y era:
fmagia :: (Num a, Ord b) => a -> (a -> a -> b) -> b -> [a] -> Bool (Eso dice el WinGHCi)

Si alguien me tira un centro con el de las consultas del punto 1 de Haskell se lo agradecería.
Yo en las consultas, aplique todo orden superior.

Para el primer caso hice:

mujeresPeloCastaño = (map nombre . filter peloCastaño . filter esMujer) personajes

Basicamente aplicas filtros a la lista hasta obtener las minas.
De todas formas no es muy confiable porque saqué 5 =P.
(13-12-2014 19:31)Martin. escribió: [ -> ]Yo en las consultas, aplique todo orden superior.

Para el primer caso hice:

mujeresPeloCastaño = (map nombre . filter peloCastaño . filter esMujer) personajes

Basicamente aplicas filtros a la lista hasta obtener las minas.
De todas formas no es muy confiable porque saqué 5 =P.

eso está bien, pero fijate que te preguntan sólo si alguna mujer tiene pelo castaño. no los nombres. o sea, a todo eso le falta un gran any. parece una boludez pero le deben dar importancia.

con los hombres de boca grande sí, únicamente los nombres.
B-3.
Aclaraciones:
VC: Variables de Clase
WS: Workspace
variables con mayuscula => variables de clase
[Imagen: 868ca9a2]



#Wiki
>>subirContenido: unContenido
(unContenido tardaEnSubir > TamanioAceptado)
ifTrue: [ unContenido achicar ]
contenidos add: unContenido

#Texto
>>tardaEnSubir
^descripcion size * FactorDesc

>>achicar
self indexar

#Imagen
>>tardaEnSubir
^cantidadPixeles

>>achicar
self comprimir


Puede haber varias soluciones posibles.
Yo la plantearía así. Justificando que:

· achicar es polimorfico porque lo entienden varias clases, y devuelven lo mismo.

· tardaEnSubir tambien es polimórfico.

· Originalmente "* 10" estaba en el método de Texto, con lo que va a ser un factor (o el nombre que quieran ponerle) igual para todas las instancias.
Me gusta pensar que si hay un valor igual para todas las instancias, lo puedo abstraer en una VC la cual es modificable mediante WS.

· Similar al anterior con TamanioAceptado

· Porque tardaEnSubir no devuelve un booleano?
Para mi, saber cuanto tarda en subirse es responsabilidad del contenido, pero saber si es demasiado pesado es responsabilidad de la wiki.
De hecho la comparación que se hace con 10000, yo supongo (no lo dice el texto) que es "decisión" de la wiki determinar ese valor.

· Porque mantengo la clase Contenido?
Porque en otros lenguajes (como java), yo puedo tener listas de instancias de una sola clase. Si yo defino List<Contenido> voy a poder guardar texto, imagenes y cualquier otra instancia de clases que hereden de Contenido.
(13-12-2014 19:31)Martin. escribió: [ -> ]Yo en las consultas, aplique todo orden superior.

Para el primer caso hice:

mujeresPeloCastaño = (map nombre . filter peloCastaño . filter esMujer) personajes

Basicamente aplicas filtros a la lista hasta obtener las minas.
De todas formas no es muy confiable porque saqué 5 =P.

yo tambien las hice asi, aunque sin composicion (con composicion queda mejor).
(13-12-2014 19:09)verne escribió: [ -> ]Yo clavé un 6. Me parece que frutié con lo de las consultas de haskell y el A-3 no lo hice.
La parte de objetos era fácil.
Lo del tipo de fmagia recién lo chequié y lo hice casi perfecto.

Yo hice:
fmagia :: (Num a, Ord a) => a -> (a -> a -> a) -> a -> [a] -> Bool

Y era:
fmagia :: (Num a, Ord b) => a -> (a -> a -> b) -> b -> [a] -> Bool (Eso dice el WinGHCi)

Si alguien me tira un centro con el de las consultas del punto 1 de Haskell se lo agradecería.

Podrias explicarme por favor como llegas a esa conclusión con respecto al tipo de dato?

Con respecto a lo de haskell yo lo haria asi:
a) pelo (_,_,color,_)=color
genero(_,g,_,_)=g
esMujer persona = genero persona == "mujer"
esCastaño persona = pelo persona == "castaño"
mujerCastaña persona = (esMujer persona) && (esCastaño persona)

existeMujerCastaña listaPersonajes = any mujerCastaña listaPersonajes

b)boca (_,_,_,b) = b
nombre (n,_,_,_) = n
esHombre persona = genero persona == "hombre"
tieneBocaGrande persona = boca persona == "grande"

hombresDeBocaGrande listaPersonajes = (map nombre. filter tieneBocaGrande. filter esHombre) listaPersonajes
(15-12-2014 11:35)Adolfito escribió: [ -> ]
(13-12-2014 19:09)verne escribió: [ -> ]Yo clavé un 6. Me parece que frutié con lo de las consultas de haskell y el A-3 no lo hice.
La parte de objetos era fácil.
Lo del tipo de fmagia recién lo chequié y lo hice casi perfecto.

Yo hice:
fmagia :: (Num a, Ord a) => a -> (a -> a -> a) -> a -> [a] -> Bool

Y era:
fmagia :: (Num a, Ord b) => a -> (a -> a -> b) -> b -> [a] -> Bool (Eso dice el WinGHCi)

Si alguien me tira un centro con el de las consultas del punto 1 de Haskell se lo agradecería.

Podrias explicarme por favor como llegas a esa conclusión con respecto al tipo de dato?

Con respecto a lo de haskell yo lo haria asi:
a) pelo (_,_,color,_)=color
genero(_,g,_,_)=g
esMujer persona = genero persona == "mujer"
esCastaño persona = pelo persona == "castaño"
mujerCastaña persona = (esMujer persona) && (esCastaño persona)

existeMujerCastaña listaPersonajes = any mujerCastaña listaPersonajes

b)boca (_,_,_,b) = b
nombre (n,_,_,_) = n
esHombre persona = genero persona == "hombre"
tieneBocaGrande persona = boca persona == "grande"

hombresDeBocaGrande listaPersonajes = (map nombre. filter tieneBocaGrande. filter esHombre) listaPersonajes

no podias implementar nada, solo consultar (es decir que no podias desarrollar las funciones que desarrollaste).
(15-12-2014 11:35)Adolfito escribió: [ -> ]
(13-12-2014 19:09)verne escribió: [ -> ]Yo clavé un 6. Me parece que frutié con lo de las consultas de haskell y el A-3 no lo hice.
La parte de objetos era fácil.
Lo del tipo de fmagia recién lo chequié y lo hice casi perfecto.

Yo hice:
fmagia :: (Num a, Ord a) => a -> (a -> a -> a) -> a -> [a] -> Bool

Y era:
fmagia :: (Num a, Ord b) => a -> (a -> a -> b) -> b -> [a] -> Bool (Eso dice el WinGHCi)

Si alguien me tira un centro con el de las consultas del punto 1 de Haskell se lo agradecería.

Podrias explicarme por favor como llegas a esa conclusión con respecto al tipo de dato?

Yo lo razoné así:

fmagia tiene 3 parámetros y uno que pasa por aplicación parcial, o sea 4.

fmagia :: (precondición a completar) => W -> X -> Y -> Z -> Bool (devuelve Bool ya que el all que es lo último que se hace devuelve True o False)

Ahora bien, empezamos a buscar W, X, Y y Z.
Z, vendría a ser un lista ya que lo primero que se hace es aplicar map, map recibe una función que devuelve bool y una lista, y devuelve una lista (ver :t map).
Por lo tanto Z será una lista de algún tipo que llamaremos Z.

fmagia :: (precondición a completar) => W -> X -> Y -> [Z] -> Bool

Como el map (*a) va a multiplicar por "a" todos los valores de la lista, a y Z son numéricos. Y además deben ser del mismo tipo ya que el * multiplica mismos tipos (ver :t (*)). Ahí tenemos una precondición NUM y W que era el parámetro "a" es del mismo tipo que Z.

fmagia :: Num Z => Z -> X -> Y -> [Z] -> Bool

Miremos un poco la función, el resultado del map (que es una lista [Z]) va a entrar como parámetro del all. El all recibe una función que devuelve un bool y una lista que será la que se itera con la función anterior (ver :t all). Entonces "b a" va a recibir el "a" (ya definido) y cada elemento de la lista que se envió al all, entones podemos definir "b" que es mi X en mi planteo. X :: (Z -> Z -> M)
Va a devolver un valor que el tipo dependerá de lo que haga la función "b", entonces lo ponemos con otra letra "M". (esta parte la había hecho mal, deduje que "b" iba a devolver el mismo tipo de lo que recibía, pero eso no lo podés saber porque no sabés qué hace específicamente "b", entonces ponés un tipo diferente, como bien hice ahora).

fmagia :: Num Z => Z -> (Z -> Z -> M) -> Y -> [Z] -> Bool

Miremos el parámetro "c", podemos ver que es acompañado por un ">" por lo que ya sabemos que tendrá una precondición Ord.
Nos queda "Y" que vendría a representar al parámetro "c". Como vemos en la función, el ">" va a operar con "c" y lo que devuelve la función "b" (era una M). Entonces podemos decir que "c" será del tipo "M". Por lo tanto:

fmagia :: Num Z, Ord M => Z -> (Z -> Z -> M) -> M -> [Z] -> Bool

Ponemos letras más lindas...

fmagia :: Num a, Ord b => a -> (a -> a -> b) -> b -> [a] -> Bool

Esta es mi forma de hacerlo, complicado explicarla por texto. Seguro hay métodos mejores como utilizar algoritmos de inferencia de tipos, lo mío es más deductivo.

Espero que sirva, abrazo!
(15-12-2014 20:54)DobleR escribió: [ -> ]
(15-12-2014 11:35)Adolfito escribió: [ -> ]
(13-12-2014 19:09)verne escribió: [ -> ]Yo clavé un 6. Me parece que frutié con lo de las consultas de haskell y el A-3 no lo hice.
La parte de objetos era fácil.
Lo del tipo de fmagia recién lo chequié y lo hice casi perfecto.

Yo hice:
fmagia :: (Num a, Ord a) => a -> (a -> a -> a) -> a -> [a] -> Bool

Y era:
fmagia :: (Num a, Ord b) => a -> (a -> a -> b) -> b -> [a] -> Bool (Eso dice el WinGHCi)

Si alguien me tira un centro con el de las consultas del punto 1 de Haskell se lo agradecería.

Podrias explicarme por favor como llegas a esa conclusión con respecto al tipo de dato?

Con respecto a lo de haskell yo lo haria asi:
a) pelo (_,_,color,_)=color
genero(_,g,_,_)=g
esMujer persona = genero persona == "mujer"
esCastaño persona = pelo persona == "castaño"
mujerCastaña persona = (esMujer persona) && (esCastaño persona)

existeMujerCastaña listaPersonajes = any mujerCastaña listaPersonajes

b)boca (_,_,_,b) = b
nombre (n,_,_,_) = n
esHombre persona = genero persona == "hombre"
tieneBocaGrande persona = boca persona == "grande"

hombresDeBocaGrande listaPersonajes = (map nombre. filter tieneBocaGrande. filter esHombre) listaPersonajes

no podias implementar nada, solo consultar (es decir que no podias desarrollar las funciones que desarrollaste).

y como haces sin funciones? Si haces una que use map y filter estas creando una funcion tambien...
aparte el enunciado te dice que el juego consiste en hacer preguntas que se respondan con si o con no a mi me da a entender que podes usar funciones que devuelvan true o false, pero bueno si no es asi explicame por favor a que se refiere asi no la cago cuando lo de =P
Tenes que usar las funciones, pero no tenes que desarrollarlas.
Como lo hiciste vos está bien, pero no tenes que hacerlas, solo nombrarlas.
(17-12-2014 10:38)verne escribió: [ -> ]
(15-12-2014 11:35)Adolfito escribió: [ -> ]
(13-12-2014 19:09)verne escribió: [ -> ]Yo clavé un 6. Me parece que frutié con lo de las consultas de haskell y el A-3 no lo hice.
La parte de objetos era fácil.
Lo del tipo de fmagia recién lo chequié y lo hice casi perfecto.

Yo hice:
fmagia :: (Num a, Ord a) => a -> (a -> a -> a) -> a -> [a] -> Bool

Y era:
fmagia :: (Num a, Ord b) => a -> (a -> a -> b) -> b -> [a] -> Bool (Eso dice el WinGHCi)

Si alguien me tira un centro con el de las consultas del punto 1 de Haskell se lo agradecería.

Podrias explicarme por favor como llegas a esa conclusión con respecto al tipo de dato?

Yo lo razoné así:

fmagia tiene 3 parámetros y uno que pasa por aplicación parcial, o sea 4.

fmagia :: (precondición a completar) => W -> X -> Y -> Z -> Bool (devuelve Bool ya que el all que es lo último que se hace devuelve True o False)

Ahora bien, empezamos a buscar W, X, Y y Z.
Z, vendría a ser un lista ya que lo primero que se hace es aplicar map, map recibe una función que devuelve bool y una lista, y devuelve una lista (ver :t map).
Por lo tanto Z será una lista de algún tipo que llamaremos Z.

fmagia :: (precondición a completar) => W -> X -> Y -> [Z] -> Bool

Como el map (*a) va a multiplicar por "a" todos los valores de la lista, a y Z son numéricos. Y además deben ser del mismo tipo ya que el * multiplica mismos tipos (ver :t (*)). Ahí tenemos una precondición NUM y W que era el parámetro "a" es del mismo tipo que Z.

fmagia :: Num Z => Z -> X -> Y -> [Z] -> Bool

Miremos un poco la función, el resultado del map (que es una lista [Z]) va a entrar como parámetro del all. El all recibe una función que devuelve un bool y una lista que será la que se itera con la función anterior (ver :t all). Entonces "b a" va a recibir el "a" (ya definido) y cada elemento de la lista que se envió al all, entones podemos definir "b" que es mi X en mi planteo. X :: (Z -> Z -> M)
Va a devolver un valor que el tipo dependerá de lo que haga la función "b", entonces lo ponemos con otra letra "M". (esta parte la había hecho mal, deduje que "b" iba a devolver el mismo tipo de lo que recibía, pero eso no lo podés saber porque no sabés qué hace específicamente "b", entonces ponés un tipo diferente, como bien hice ahora).

fmagia :: Num Z => Z -> (Z -> Z -> M) -> Y -> [Z] -> Bool

Miremos el parámetro "c", podemos ver que es acompañado por un ">" por lo que ya sabemos que tendrá una precondición Ord.
Nos queda "Y" que vendría a representar al parámetro "c". Como vemos en la función, el ">" va a operar con "c" y lo que devuelve la función "b" (era una M). Entonces podemos decir que "c" será del tipo "M". Por lo tanto:

fmagia :: Num Z, Ord M => Z -> (Z -> Z -> M) -> M -> [Z] -> Bool

Ponemos letras más lindas...

fmagia :: Num a, Ord b => a -> (a -> a -> b) -> b -> [a] -> Bool

Esta es mi forma de hacerlo, complicado explicarla por texto. Seguro hay métodos mejores como utilizar algoritmos de inferencia de tipos, lo mío es más deductivo.

Espero que sirva, abrazo!

Muy buena explicación, muchas gracias

(17-12-2014 10:54)Martin. escribió: [ -> ]Tenes que usar las funciones, pero no tenes que desarrollarlas.
Como lo hiciste vos está bien, pero no tenes que hacerlas, solo nombrarlas.

ah joya en mi caso ponele seria esto nomas:

existeMujerCastaña listaPersonajes = any mujerCastaña listaPersonajes

hombresDeBocaGrande listaPersonajes = (map nombre. filter tieneBocaGrande. filter esHombre) listaPersonajes

no?
Correcto!, diría Susana.
Páginas: 1 2
URLs de referencia