4

我有一个函数 f 是这样的:

f = do
      x1 <- g
      x2 <- g
      x3 <- g
      ...
      xn <- g
      return [x1,x2,x3,..., xn] --or (x1,x2,x3,..., xn)

这需要很多行代码,我觉得这可以做得更漂亮。我想知道是否有办法做这样的事情:

f = do
      [x,y,z] <- [g,g,g]
      return [x,y,z]
4

2 回答 2

9

使用sequencereplicate

f = do
    xs <- sequence $ replicate n g
    return xs
于 2013-10-19T20:37:51.510 回答
7

@Zeta 解决方案的一个更简单的版本是:

import Control.Monad

f = replicateM n g
于 2013-10-19T22:45:58.173 回答