首页 文章

使用函数动态创建列表

提问于
浏览
1

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

[1]

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

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

我将如何在Haskell中编写代码?

3 回答

  • 0

    iterate

    Prelude> let f x = (x + 2) * 10 in take 5 $ iterate f 1
    [1,30,320,3220,32220]
    
  • 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)
    
  • 3

    你已经得到了答案:你使用 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)
    

相关问题