【问题标题】:'Repeat' in Haskell?在 Haskell 中“重复”?
【发布时间】:2011-08-01 08:19:50
【问题描述】:

我是 Haskell 的新手,我有一个简单的问题。

我可以使用 a 和 b 的什么函数来产生 a、b 次。

示例:
a = 4 | b = 3
将返回:
[4, 4, 4]

谢谢!

【问题讨论】:

标签: list haskell


【解决方案1】:

你也可以使用递归(当然上面的解决方案应该是首选):

rep a 0 = []
rep a b = a : rep a (b-1)

【讨论】:

    【解决方案2】:

    .. 或者类似的东西

    > take 3 [4,4..]
    > [4,4,4]
    

    【讨论】:

      【解决方案3】:

      当然peoro 是对的,你应该使用replicate

      但是,此类任务的一个非常常见的模式是构建一个无限列表,并从中获取所需的任意数量(使用 taketakeWhile):

      rep a b = take b $ repeat a
      

      另一种(比实际更具教育意义)的方法是使用正确长度的列表,并将所有元素映射到:

      rep a b = map (const a) [1..b]
      

      一个非常低效但有趣的版本是

      rep a b = until ((b==).length) (a:) []
      

      【讨论】:

        【解决方案4】:

        replicate:

        replicate 3 4
        

        将是:

        [4,4,4]
        

        当你知道你需要的函数的类型是什么时(在这种情况下,很明显你需要的函数的类型类似于Int -> a -> [a])你可以使用Hoogle来找到它。

        【讨论】:

        • 要获得彼得描述的 exact 行为,请使用:flip replicate 4 3
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-20
        • 1970-01-01
        • 2012-05-26
        • 1970-01-01
        相关资源
        最近更新 更多