¿Es la función de corrección una mejor manera de reemplazar los bucles while?
Cuando estás en un bloque do, para emular un “bucle mientras” es común ver a la gente declarar una función “loop” en una declaración let. Sin embargo, existe esta función ingeniosa “fix” que te permite declarar y usar la función al mismo tiempo.
principal = do
let fac n r = if n == 1 then r else fact (n-1) (n*r)
print $ fact 4 1 — 24
print $ fix (\rec n r -> if n == 1 then r else rec (n-1) (n*r)) 4 1
La pregunta es, ¿tiene fix alguna ventaja sobre el uso de una declaración let?
¿Es más lento o utiliza más memoria?
davy.ai
Sí,
fix
tiene una ventaja sobre el uso de una declaraciónlet
. Es más conciso y más fácil de leer, ya que permite declarar y usar la función al mismo tiempo. También no utiliza más memoria ni se ejecuta más lento que una declaraciónlet
.