Haskell语言学习笔记(77)fix

fix

fix 是一个在 Data.Function 中定义的函数,主要用于定义不动点函数。

fix :: (a -> a) -> a
fix f = let x = f x in x

fix 函数的定义使用了递归绑定,比较难以理解:

fix f
= let x = f x in x
= let x = f x in f x
= let x = f x in f (f x)
= let x = f x in f (f (f x))
= let x = f x in f (f .. (f (f x)) ..)
= let x = f x in f . f . ... . f . f $ x

即 fix 函数的实质是无限多次调用函数 f,直至函数 f 结束递归并产生一种能被自身调用的数据结构。
这里的最终参数 x 是一个永远不会被调用的参数,也就是一个占位符。

猜你喜欢

转载自www.cnblogs.com/zwvista/p/9267657.html