[2016] Segunda instancia Ejercicio 3

[2016] Segunda instancia Ejercicio 3

de Maria Victoria Armand Ugon De Souza -
Número de respuestas: 3

Buenas,

Q tal?

No se como resolver este ejercicio.

Entiendo que hace iterate pero mi duda es desde que numero empieza si no se le pasa nada como parámetro. Tampoco entiendo quien seria f. 

  1. Dada la siguiente definici ́on:
    mucho = take 5 ◦ dropWhile (>0) ◦ map (λf → f 0) $ iterate ((+1)◦) id

    ¿Cu ́al de las siguientes afirmaciones es correcta? 


(a) Al evaluarse mucho retorna [1,2,3,4,5]

 (b) Al evaluarse mucho diverge

(c) Al evaluarse mucho retorna [0,1,2,3,4] 

(d) Al evaluarse mucho retorna [6..]


Correcta: c)


En respuesta a Maria Victoria Armand Ugon De Souza

Re: [2016] Segunda instancia Ejercicio 3

de Marcos Viera - InCo -

La función iterate tiene tipo:

 iterate :: (a -> a) -> a -> [a]

y lo que hace es que si se pasa:

 iterate f x

retorna la lista:

 [x, f x, f (f x), f (f (f x)), ...]

Por lo tanto la aplicación

iterate ((+1) .) id

retorna la lista de funciones:

[id, (+1) . id,  (+1) . (+1) . id, ...]

Luego con el map se le pasa el argumento a esas funciones...

En respuesta a Marcos Viera - InCo

Re: [2016] Segunda instancia Ejercicio 3

de Maria Victoria Armand Ugon De Souza -

Gracias!

Igualmente no estoy llegando al resultado:

  1. mucho = take 5 ◦ dropWhile (>0) ◦ map (λf → f 0) $ iterate ((+1)◦) id=

    mucho = take 5 ◦ dropWhile (>0) ◦ map (λf → f 0) [id, (+1).id,(+1).(+1).id ,...]=
    mucho = take 5 ◦ dropWhile (>0)  [id 0, (+1).id 0,(+1).(+1).id 0,...]=

    mucho = take 5 ◦ dropWhile (>0)  [ 0, 1,2,3,4,5,...]=
    mucho = take 5  [ 1,2,3,4,5,...]= [ 1,2,3,4,5]

el resultado correcto según la solución es [0,1,2,3,4]