为什么 iterate 没有定义为

iterate :: (a -> a) -> a -> [a]
iterate f x = xs where xs = x : map f xs

在前奏中?

最佳答案

像这样打结似乎并没有增加共享。

与:

cycle xs = let x = xs ++ x in x

在此处打结的效果是在内存中创建循环链表。 x是它自己的尾部。有真正的收获。

建议的实现不会增加朴素实现的共享。首先,它是没有办法的-像iterate (+1) 0这样的东西都没有共享结构。

关于haskell - 为什么Prelude中的 `iterate`不能打结?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30949430/

10-13 07:59