Reputation: 217
I want to define a function replicate to replicate a list of numbers by its value using only list comprehension, for example:
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]
I know this would be easy to use the 'replicate' built in function but only list comprehension is allow, how can I do this?
THANKS!
Upvotes: 1
Views: 849
Reputation: 1
For kicks:
import Control.Monad
import Control.Monad.Instances
repList = concatMap $ join replicate
Upvotes: 7
Reputation: 4253
Neat little problem. I solved it like this.
replicate list = [ a | a <- list, _ <- [1..a]]
Prelude> replicate [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]
It takes each value in the list, creates that many copies of itself, and then moves to the next value.
Upvotes: 9