Ejercicios de autoevaluación - Evaluación Perezosa y Mónadas

Ejercicios de autoevaluación - Evaluación Perezosa y Mónadas

de Alejandro Miguel Andriani -
Número de respuestas: 1

Buenas,

La siguiente función generaAux aparece muchas veces en el ejercicio de autoevaluación:

data Arbol a = Vacio | Nodo (Arbol a) a (Arbol a)
genera = fst $ generaAux 0
  where generaAux n  =  let  (l,n' )  = generaAux (n+1)
                             (r,n'')  = generaAux n'
                        in   (Nodo  l n r, n'')
No estoy entendiendo completamente que es lo que retorna generaAux 0 por ejemplo, me estoy mareando con el segundo valor de la tupla n' y n''.

Alguien me podría explicar como funciona y que retorna?

Muchas gracias.
Alejandro
En respuesta a Alejandro Miguel Andriani

Re: Ejercicios de autoevaluación - Evaluación Perezosa y Mónadas

de Marcos Viera - InCo -

La función generaAux genera un árbol poniendo números en sus nodos y retorna un par con el árbol y número que en realidad nunca se llega a calcular.

Como la recursión nunca termina, nunca podemos obtener el segundo componente del resultado y además nunca entramos en la llamada recursiva del lado derecho del árbol y cada subárbol.

Lo que sí podemos ver es que se pueden hacer infinitas recursiones a la izquierda, que van generando un árbol:

(Nodo (Nodo (Nodo (Nodo (...) 3 r'') 2 r'') 1 r') 0 r)

O sea que siempre que vayamos recorriendo ese árbol hacia la izquierda, algo vamos a obtener.