代码之家  ›  专栏  ›  技术社区  ›  Andrei Ciobanu

您将如何(重新)在Haskell中实现iterate?

  •  8
  • Andrei Ciobanu  · 技术社区  · 15 年前
    iterate :: (a -> a) -> a -> [a]
    

    (你可能知道) iterate 是一个接受函数和起始值的函数。然后将函数应用于起始值,然后将相同的函数应用于最后的结果,依此类推。

    Prelude> take 5 $ iterate (^2) 2
    [2,4,16,256,65536]
    Prelude> 
    

    take ). iterate' 在Haskell中只使用基本函数( (:) (++) lambdas、图案加工、防护装置等)?

    2 回复  |  直到 15 年前
        1
  •  28
  •   emi    15 年前

    好, 迭代 构造一个无限的值列表 f级 . 所以我要先写一个函数,在它前面加上一些值 通过递归调用iterate 法国 :

    iterate :: (a -> a) -> a -> [a]
    iterate f a = a : iterate f (f a)
    

    由于延迟求值,只会求值构造的列表中计算函数值所需的那部分。

        2
  •  15
  •   sclv    15 年前

    Standard Prelude .

    阅读这个简单的定义列表,基本上从原始原语中引导出一个丰富的库,对于提供一个“haskell方式”的窗口来说,是非常有教育意义和令人大开眼界的。

    我记得一个非常早的阅读时刻: data Bool = False | True .