Ejercicios de Repaso Evaluación Perezosa

Ejercicios de Repaso Evaluación Perezosa

de Lucas Hernan Bruzzone Rodriguez -
Número de respuestas: 2

Buenas, tengo la siguiente consulta sobre los ejercicios de repaso de evaluacion perezosa.

Por ejemplo en:
A)

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'')
recorreL  (Nodo l x _)  = x : recorreL l
recorreL  Vacio         = []
Se debe evaluar `take 5 . tail . recorreL $ genera`

B)

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'')
recorreR  (Nodo _ x r)  = x : recorreR r
recorreR  Vacio         = []
Se debe evaluar `take 5 . tail . recorreR $ genera`


No me queda claro por que B) diverge y A) no. La unica diferencia que veo es que en `Nodo l n r`, uno recorre por l y otro por r (en las funciones recorreL y recorreR respectivamente). Pero no me queda claro por qué esto causa que uno diverga y el otro no.

Muchas gracias


En respuesta a Lucas Hernan Bruzzone Rodriguez

Re: Ejercicios de Repaso Evaluación Perezosa

de Marcos Viera - InCo -
En el proceso de generación del árbol, antes de empezar a generar las ramas derechas se debe generar la rama izquierda, la cual es infinita.