Haskell程序复制List中的元素(对于k值,它应该重新刷新k次)

时间:2017-12-01 17:18:55

标签: haskell

我是Haskell的新手。     例如    [[1],[2,2],[3,3,3]]

2 个答案:

答案 0 :(得分:8)

您可以通过以下方式构建包含 k 次te项x的列表:

replicate k x

现在我们要将原始列表中的每个项x映射到包含xx次的列表。我们可以把它写成:

replic the_list = map helper the_list
    where helper x = replicate x x

或者使用 lambda表达式

replic the_list = map (\x -> replicate x x) the_list

或者我们可以使用join :: Monad m => m (m a) -> m a函数:

import Control.Monad(join)

replic the_list = map (join replicate) the_list

我们也可以在这里使用 eta-reducation :在函数子句的头部和主体中删除the_list

import Control.Monad(join)

replic :: [Int] -> [[Int]]
replic = map (join replicate)

答案 1 :(得分:1)

这样的事情怎么样?

replicate' :: [Int] -> [[Int]]
replicate' l = map (\n -> take n (repeat n)) l
replicate' [1, 2, 3] -- [[1],[2,2],[3,3,3]]