Entiendo que por lazy evaluation si el 3 fuera el primero gracias al head retorna ese valor y no sigue evaluando.Pero yo pensaba que primero foldl va evaluar 1 luego inf y luego el 3.
Gracias.
Entiendo que por lazy evaluation si el 3 fuera el primero gracias al head retorna ese valor y no sigue evaluando.Pero yo pensaba que primero foldl va evaluar 1 luego inf y luego el 3.
Gracias.
lo que sucede es que head pide que la aplicación de ffl retorne algo con la forma (x:_), para eso el foldl, como es tail recursive, recorre toda la lista para retornar algo, y lo que retorna es algo de la forma (lo voy a poner como call by name, pero es lo mismo, con lazy además habría sharing)
if (>0) 3 then 3 : (if (>0) inf then inf:(if (>0) 1 then 1:[] else []) else (if (>0) 1 then 1:[] else [])) else (if (>0) inf then inf:(if (>0) 1 then 1:[] else []) else (if (>0) 1 then 1:[] else []))
lo que al dar un paso de evaluación retorna
3 : (if (>0) inf then inf:(if (>0) 1 then 1:[] else []) else (if (>0) 1 then 1:[] else []))
que tiene la forma requerida por el head, que retorna
3
Me quedó claro.
Gracias.