你如何解决这个Haskell问题?

Lin*_*hen 1 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]
Run Code Online (Sandbox Code Playgroud)

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

谢谢!

sab*_*uma 9

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

replicate list = [ a | a <- list, _ <- [1..a]]
Run Code Online (Sandbox Code Playgroud)

序曲>复制[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]

它接受列表中的每个值,创建自己的许多副本,然后移动到下一个值.

  • 提示:您可以阅读简单的列表推导,就像命令式循环一样,将值累积到列表的末尾.`a < - list`表示"循环遍历`list`的每个元素"和`b < - [1..a]`是循环中的一个循环,说"循环用`b`从1变为'a`" .开头的`a`表示每次都会在列表的末尾累积"a". (2认同)
  • 我建议使用_而不是b来说明你实际上并不关心b的值. (2认同)

Tho*_*ing 7

踢球:

import Control.Monad
import Control.Monad.Instances

repList = concatMap $ join replicate
Run Code Online (Sandbox Code Playgroud)