使用函数动态创建列表

时间:2017-08-21 02:20:19

标签: haskell

我的目标是通过将函数应用于最后一个元素来创建无限列表。例如,如果我从一个看起来像

的列表开始
[1]

并应用函数f(x)=(x + 2)* 10,我应该以

结束
[1, 30, 320, 3220, 32220...]

我如何在Haskell中编写代码?

3 个答案:

答案 0 :(得分:3)

iterate

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)