使用符号分配列表/元组

BBB*_*BBB 4 haskell functional-programming

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

f = do
      x1 <- g
      x2 <- g
      x3 <- g
      ...
      xn <- g
      return [x1,x2,x3,..., xn] --or (x1,x2,x3,..., xn)
Run Code Online (Sandbox Code Playgroud)

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

f = do
      [x,y,z] <- [g,g,g]
      return [x,y,z]
Run Code Online (Sandbox Code Playgroud)

Zet*_*eta 9

使用sequencereplicate:

f = do
    xs <- sequence $ replicate n g
    return xs
Run Code Online (Sandbox Code Playgroud)

  • 真的只是`seqeuence $ replicate ng`.`do`语法在这里完全无关. (4认同)
  • 谢谢!这让我得到了一个更漂亮的解决方案.如果使用replicateM,则不需要序列. (2认同)

Gab*_*lez 7

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

import Control.Monad

f = replicateM n g
Run Code Online (Sandbox Code Playgroud)