你如何解决这个Haskell问题?

时间:2010-05-05 22:37:39

标签: haskell list-comprehension

我想定义一个函数复制,仅使用列表推导来复制数值列表,例如:

replicate [5,1,3,2,8,1,2]
output: [5,5,5,5,5,1,3,3,3,2,2,8,8,8,8,8,8,8,8,1,2,2]

我知道这很容易使用内置函数的'replicate',但只允许列表理解,我该怎么做?

谢谢!

2 个答案:

答案 0 :(得分:9)

整洁的小问题。我这样解决了。

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

前奏&GT;复制[5,1,3,2,8,1,2]

[5,5,5,5,5,1,3,3,3,2,2,8,8,8,8,8,8,8,8,1,2,2]

它会获取列表中的每个值,创建自己的许多副本, 然后移动到下一个值。

答案 1 :(得分:7)

踢腿:

import Control.Monad
import Control.Monad.Instances

repList = concatMap $ join replicate