繁体   English   中英

你将如何(重新)在Haskell中实现迭代?

[英]How would you (re)implement iterate in Haskell?

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

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

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

结果是一个无限的列表。 (这就是我使用take的原因)。 我的问题是如何在Haskell中实现自己的iterate'函数,只使用基础知识( (:) (++) lambdas,模式mataching,guards等等?

(Haskell初学者在这里)

那么, 迭代构建由F A增加值的无限名单。 所以我会写,追加一些由递归调用与FA迭代构建列表中的函数开始:

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

由于延迟评估,将仅评估计算我的函数值所需的构造列表的那一部分。

另请注意,您可以在报告的标准前奏中找到有关基本Haskell函数范围的简明定义。

通过这个简单的定义列表来阅读基本上从原始基元中引导丰富的库可以是非常有教育意义的,并且在为“haskell方式”提供窗口方面令人大开眼界。

我记得在阅读时很早的一个时刻: data Bool = False | True data Bool = False | True

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM