我的目标是通过将函数应用于最后一个元素来创建无限列表。例如,如果我从一个看起来像
的列表开始[1]
并应用函数f(x)=(x + 2)* 10,我应该以
结束[1, 30, 320, 3220, 32220...]
我如何在Haskell中编写代码?
答案 0 :(得分:3)
Prelude> let f x = (x + 2) * 10 in take 5 $ iterate f 1
[1,30,320,3220,32220]
答案 1 :(得分:2)
有iterate
iterate :: (a -> a) -> a -> [a] -- Repeat a function forever, making a list of values
如果你想从一个列表开始,只对最后一个元素进行操作:
func f xs = (init xs) ++ (iterate f $ last xs)
答案 2 :(得分:0)
您已经得到了答案:您使用iterate
。以下是您自己编写代码的方法。
iterate
接受函数f
和种子 x
,并永久重复函数应用程序(即返回[x, f x, f (f x), f (f (f x)), ...]
)
iterate :: (a -> a) -> a -> [a]
iterate f x = x : map f (iterate f x)