Prueba 2018 - Ej10

Prueba 2018 - Ej10

de Santiago Agustín Silveira Pérez -
Número de respuestas: 1

Hola.

Este ejercicio pide indicar el resultado de expresiones a partir de las siguientes definiciones:

a = map repeat b 
b = 1 : map (+1) b
c = reverse a

Tengo dudas con la (e) (head (foldr (:) c [[1, 2]])), que da [1,2]. Pero no entiendo cómo. c es [...,[3,3,3,...],[2,2,2,...],[1,1,1,...]], verdad? como aplico la definición de foldr entonces? Supongo que gracias a la evaluación perezosa no es necesario pero justo acá no me doy cuenta cómo esta evaluando.

En respuesta a Santiago Agustín Silveira Pérez

Re: Prueba 2018 - Ej10

de Alberto Pardo -
Hola Santiago,

Me acabo de dar cuenta que me quedó por responder tu consulta.

Notá que (foldr (:) c [[1,2]]) da como resultado la lista ([1,2] : c), de la cual se pide retornar la cabeza con head, devolviendo entonces [1,2]. En este caso c no es demandado y por lo tanto, por lazy evaluation, no se lo va a inspeccionar. Por el tipado, lo único que se sabe de c es que es una lista de lista de enteros.

Saludos,
Alberto.