Buenas, tengo algunas dudas con los siguientes ejercicios de la autoevaluación:
1) Dadas las siguientes definiciones:
xs = 1 : ys ++ [3]
ys = 2 : xs
Acá marqué (last xs) retorna 3 usando evaluación perezosa, aunque la respuesta correcta ((head . tail . tail) xs) retorna 1 usando evaluación perezosa
también me parece correcta. No entiendo por qué last xs diverge, si se sabe que el último elemento es 3.
2) Indique la función que tiene un comportamiento diferente.
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 = []
¿Cuál es el resultado de evaluar take 5 . tail . recorreL $ genera
?
Acá seguí la sugerencia de evaluar recorreL $ genera, sin embargo no entiendo como se llega a computar la lista [0..] ya que a mi parecer cuando recorreL requiere la evaluación de genera, esta queda en loop infinito ejecutando generaAux (n+1).