[Prueba 2018] [Ej 10]

[Prueba 2018] [Ej 10]

de Pablo Dalchiele Gonzalez -
Número de respuestas: 1

En este ejercicio se define

a = map repeat b

b = 1:map (+1) b

c = reverse a

Pero no entiendo bien cómo se deduce alguna de los resultados


El b) (take 8 b) por qué no da [1,2,2,2,2,2,2,2]  ? Ya que aplicando la definiincion de map: map f (x:xs) = f x : map f xs y la lista que resta es b siempre, y empieza en 1. O va avanzando en la misma lista?


El d) ((take 8 . head) a) dice que da [1,1,1,1,1,1,1,1] pero para mí, desarrollando a

a = [repeat 1:map (+1) b,repeat 1:map (+1) b,.....]

entonces head a = repeat 1:map (+1) b = [1:map (+1) b,1:map (+1) b, ....] y take 8 de eso = [1:map (+1) b,1:map (+1) b,1:map (+1) b,1:map (+1) b,1:map (+1) b,1:map (+1) b,1:map (+1) b,1:map (+1) b]  lo cual diverge


Gracias por la ayuda desde ya!

En respuesta a Pablo Dalchiele Gonzalez

Re: [Prueba 2018] [Ej 10]

de Pablo Dalchiele Gonzalez -

Me respondieron en otro lado y respondo acá por si alguien tiene la misma duda.

En el b) el map va avanzando sobre la misma lista, por lo que sería como que hace 1: map (+1) [1. 2do elem, 3er elem,...] = 1: [(+1) 1, (+1) 2do elem, (+1) 3er elem, .....] como que se queda esperando los elementos restantes y a medida que los genera les aplica la funcion. No se si es correcto del toda mi explicación.


En el d) lo que hace el map repeat es aplicarse sobre cada elemento de la lista b entonces queda

a = [[1,1, .... ], [2,2, .....], ...] y tomando (take 8 . head) a da [1,1,1,1,1,1,1,1]