Seguimos buscando a Arshak. Ayudanos compartiendo!
Encuesta no oficial de docentes
Resultados de la encuesta no oficial de docentes
Probaste el SIGA Helper?

Donar $100 Donar $200 Donar $500 Donar mensualmente


Enviar respuesta 
 
Calificación:
  • 0 votos - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Buscar en el tema
Final Paradigmas de Programación 13/12/14
Autor Mensaje
Adolfito Sin conexión
Campeon del cubo Rubik
Sin estado :(
****

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 114
Agradecimientos dados: 17
Agradecimientos: 13 en 7 posts
Registro en: Nov 2012
Mensaje: #16
RE: Final Paradigmas de Programación 13/12/14
(17-12-2014 11:10)Martin. escribió:  Correcto!, diría Susana.

Buenísimo, gracias
19-12-2014 09:28
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
tachu Sin conexión
Empleado del buffet
Sin estado :(
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 13
Agradecimientos dados: 37
Agradecimientos: 2 en 1 posts
Registro en: Sep 2008
Mensaje: #17
RE: Final Paradigmas de Programación 13/12/14
(17-12-2014 10:38)verne escribió:  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!

Y en la parte b) de este punto con tipos qué respondiste?
Es posible siempre evaluar usando como último parámetro la lista infinita [1..] ?
19-12-2014 18:52
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Martin. Sin conexión
Presidente del CEIT
Enjoy it !
********

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 1.380
Agradecimientos dados: 88
Agradecimientos: 296 en 137 posts
Registro en: Oct 2011
Mensaje: #18
RE: Final Paradigmas de Programación 13/12/14
Pensalo un poco.
Qué hace el all? Devuelve true o false si una lista todos sus elementos cumplen con una condición.
Entonces si vos le pasas una lista infinita y todos sus elementos cumplen con la condición qué te devolvería?

[Imagen: jQJfyBGh9SOmZ.png]
(Este mensaje fue modificado por última vez en: 19-12-2014 19:32 por Martin..)
19-12-2014 19:32
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
tachu Sin conexión
Empleado del buffet
Sin estado :(
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 13
Agradecimientos dados: 37
Agradecimientos: 2 en 1 posts
Registro en: Sep 2008
Mensaje: #19
RE: Final Paradigmas de Programación 13/12/14
(19-12-2014 19:32)Martin. escribió:  Pensalo un poco.
Qué hace el all? Devuelve true o false si una lista todos sus elementos cumplen con una condición.
Entonces si vos le pasas una lista infinita y todos sus elementos cumplen con la condición qué te devolvería?

A ver, por la evaluación peresoza (lazy evaluation), tengo que decir que, de movida, lo evalua.
Ahora, mientras todos los valores que va generando la lista potencialmente infinita cumplan la condición va a seguir, y seguir, y seguir... no termina.
En cambio, si en algún momento encuentra uno que no lo cumple, va a cortar.
Estoy bien?
19-12-2014 20:04
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
maxiutnutn Sin conexión
Empleado del buffet
ingenieria y sociedad
*

Ing. en Sistemas
Facultad Regional Buenos Aires

Mensajes: 15
Agradecimientos dados: 5
Agradecimientos: 3 en 2 posts
Registro en: Dec 2014
Mensaje: #20
RE: Final Paradigmas de Programación 13/12/14
"A ver, por la evaluación peresoza (lazy evaluation), tengo que decir que, de movida, lo evalua.
Ahora, mientras todos los valores que va generando la lista potencialmente infinita cumplan la condición va a seguir, y seguir, y seguir... no termina.
En cambio, si en algún momento encuentra uno que no lo cumple, va a cortar.
Estoy bien?"

yo creo que corta por que la funcion esta definida de forma recursiva. no se si algo tiene que ver la evaluacion peresoza
21-12-2014 18:17
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: 174
Agradecimientos dados: 73
Agradecimientos: 19 en 17 posts
Registro en: Jun 2008
Mensaje: #21
RE: Final Paradigmas de Programación 13/12/14
(19-12-2014 20:04)tachu escribió:  
(19-12-2014 19:32)Martin. escribió:  Pensalo un poco.
Qué hace el all? Devuelve true o false si una lista todos sus elementos cumplen con una condición.
Entonces si vos le pasas una lista infinita y todos sus elementos cumplen con la condición qué te devolvería?

A ver, por la evaluación peresoza (lazy evaluation), tengo que decir que, de movida, lo evalua.
Ahora, mientras todos los valores que va generando la lista potencialmente infinita cumplan la condición va a seguir, y seguir, y seguir... no termina.
En cambio, si en algún momento encuentra uno que no lo cumple, va a cortar.
Estoy bien?

Volviendo a esto...
Creo que gracias a la evaluacion perezosa, va a ser posible evaluar la funcion con una lista infinita. Al tener el all adelante, cuando encuentre un valor que no cumpla la condicion va a cortar y devolver False.

por ej:

All (>4) [1..]

si probas eso en haskell automaticamente devuelve False.
27-09-2015 01:43
Encuentra todos sus mensajes Agregar agradecimiento Cita este mensaje en tu respuesta
Buscar en el tema
Enviar respuesta 




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