【问题标题】:Haskell own replicate with first list-comprehension and then with recursionHaskell 自己的复制,首先是列表理解,然后是递归
【发布时间】:2014-06-12 03:26:48
【问题描述】:

必须编写与复制函数具有相同效果的函数。

  1. 列表理解:

我的尝试:

rep list = [ a | a <- list, _ <- [1..a]]

适用于 Ints,但我也想将它与 chars 一起使用。 像这样的:

rep 4 "Hello"   => "Hello", "Hello", "Hello", "Hello"

2 递归:

rep :: (Num i, Ord i) => i -> a -> [a]  
rep n x  
    | n <= 0    = []  
    | otherwise = x:rep (n-1) x  

字符也有同样的问题!

【问题讨论】:

    标签: haskell recursion list-comprehension


    【解决方案1】:

    对于列表理解,这应该有效:

    rep :: (Enum a, Num a) => a -> t -> [t]
    rep num list = [ a | a <- [list], _ <- [1..num]]
    

    或者以更有效和更好的形式(感谢@chi):

    rep num list = [ list | _ <- [1..num]]
    

    演示:

    λ> rep 3 3
    [3,3,3]
    λ> rep 3 "hello"
    ["hello","hello","hello"]
    

    您的递归程序在这两种情况下都适用于我。

    【讨论】:

    • [ a | a &lt;- [list], _ &lt;- [1..num]] 可以改写为[ list | _ &lt;- [1..num]]
    猜你喜欢
    • 2015-03-10
    • 1970-01-01
    • 2011-10-01
    • 2017-02-10
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多