[Ejercicio 6] [Prueba 2020]

[Ejercicio 6] [Prueba 2020]

de Carolina Burgos Paula -
Número de respuestas: 2

Buenas,

con respecto al ejercicio 6 del examen 2020, no nos queda claro el funcionamiento de la función baz

Por ejemplo: take 3 $ baz id 0 tree retorna [0, 2, 4]. No entendemos como ocurre esto si la función que se pasa como parámetro es la función identidad id, el parámetro k=0, y tenes un tree, baz siempre suma cuanto mucho 1 a k, y le aplica f que en nuestro caso sería la función identidad, como es que k no aumenta de uno en uno, sino que aumenta de dos en dos?

Desde ya gracias!!

En respuesta a Carolina Burgos Paula

Re: [Ejercicio 6] [Prueba 2020]

de Marcos Viera - InCo -

Hola,

Pego el código:

data T = N | C T T 

baz f k N = [ ] 
baz f k (C t N ) = f (baz f (k + 1) t)
baz f k (C t u) = k : baz f (k + 1) u

tree = C N (C tree N )


Si miran las ecuaciones pueden ver que en algunos casos el k se agrega a la lista y en otros no.
Ahora sigamos la secuencia de evaluación de (take 3 $ baz id 0 tree)

(me voy a saltear algunos pasos de cuentas simples)

take 3 $ baz id 0 tree  == *def de tree*
take 3 $ baz id 0 (C N (C tree N )) == *ahora puedo reducir la aplicación de baz, tercera ecuación*
take 3 $ 0 : baz id 1 (C tree N ) == *ahora puedo reducir la aplicación de take*
0 : take 2 $ baz id 1 (C tree N ) == *ahora puedo reducir la aplicación de baz, segunda ecuación*
0 : take 2 $ id (baz id 2 tree) == *id*
0 : take 2 $ baz id 2 tree == *def de tree*

0 : take 2 $ baz id 2 (C N (C tree N )) == *ahora puedo reducir la aplicación de baz, tercera ecuación*
0 : take 2 $ 2 : baz id 3 (C tree N ) == *ahora puedo reducir la aplicación de take*
0 : 2 : take 1 $ baz id 3 (C tree N ) == *ahora puedo reducir la aplicación de baz, segunda ecuación*
0 : 2 : take 1 $ id (baz id 4 tree) == *id*
0 : 2 : take 1 $ baz id 4 tree == *def de tree*
0 : 2 : take 1 $ baz id 4 (C N (C tree N )) == *ahora puedo reducir la aplicación de baz, tercera ecuación*
0 : 2 : take 1 $ 4 : baz id 5 (C tree N ) == *ahora puedo reducir la aplicación de take*
0 : 2 : 4 : take 0 $ baz id 5 (C tree N ) == *ahora puedo reducir la aplicación de take*
0 : 2 : 4 : []

Espero haya quedado más claro.

saludos

En respuesta a Marcos Viera - InCo

Re: [Ejercicio 6] [Prueba 2020]

de Carolina Burgos Paula -
Buenas Marcos,

muchas gracias por tu respuesta, ahora nos quedo claro el funcionamiento de baz, creo que no aplicábamos bien la definición de tree al momento de hacer los cálculos dentro de la función.

Muchas gracias por tu pronta respuesta.
Saludos!!