iterate :: (a -> a) -> a -> [a]
(你可能知道)iterate
是一个接受函数和起始值的函数。然后它将函数应用于起始值,然后将相同的函数应用于最后的结果,依此类推。
Prelude> take 5 $ iterate (^2) 2
[2,4,16,256,65536]
Prelude>
结果是一个无限列表。 (这就是为什么我使用take
)。
我的问题是你将如何实现你自己的iterate'
Haskell 中的函数,仅使用基础知识((:)
(++)
lambda、模式匹配、防护等)?
(哈斯克尔初学者在这里)
Well, iterate构造一个无限的值列表a增加了f。所以我首先编写一个在前面添加一些值的函数a到通过递归调用 iterate with 构造的列表f a:
iterate :: (a -> a) -> a -> [a]
iterate f a = a : iterate f (f a)
由于惰性求值,只有计算函数值所需的构造列表部分才会被求值。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)