fix函数是替换while循环的更好方法吗



当您在do块中时,为了模拟一个"而循环";常见的情况是,人们宣称;循环;let语句中的函数。然而,有一个聪明的功能";"修复";它允许您同时声明和使用功能

main = 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

问题是,与使用let语句相比,fix有什么优势吗?是较慢还是占用更多内存?

不,没有优势。它甚至被实现为let表达式:

fix f = let x = f x in x

最新更新