iterate :: (a -> a) -> a -> [a]

(您可能知道) iterate 是具有函数和启动值的函数。然后,它将函数应用于起始值,然后将相同的函数应用于最后一个结果,依此类推。

Prelude> take 5 $ iterate (^2) 2
[2,4,16,256,65536]
Prelude> 

结果是无限列表。 (这就是为什么我使用 take)。我的问题您将如何实施自己的 iterate' 在Haskell中的功能,仅使用基础知识((:) (++) lambdas,模式马切,后卫等)?

(Haskell初学者在这里)

有帮助吗?

解决方案

好, 迭代 构建无限的价值列表 一种 递增 F. 。因此,我将首先编写一个验证一些值的函数 一种 通过递归调用迭代构建的列表 F A:

iterate :: (a -> a) -> a -> [a]
iterate f a = a : iterate f (f a)

得益于懒惰的评估,仅评估计算我功能值所需的构建列表的一部分。

其他提示

另请注意,您可以在报告的基本Haskell功能范围内找到简明的定义 标准前奏.

读取此简单定义的清单,基本上是从原始原始图中引导丰富的图书馆的列表,就可以提供“ Haskell Way”的窗口,可以非常具有教育意义和大开眼界。

我记得很早就阅读了: data Bool = False | True.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top