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