繁体   English   中英

Haskell-元组的并行列表

[英]Haskell - Parallel list to tuples

我有一个功能,可以将列表转换为元组列表,其中每个键的值均为1。 我想通过使用并行性来做到这一点。 应该parpseqparMap功能或main_

parMap :: [String] -> [(String, Int)]
parMap [] = []
parMap (k:xs) = do
        b <- par (k, 1)
        bs <- parMap xs
        return (b:bs)

map_ :: [String] -> [(String, Int)]
map_ [] = []
map_ (k:xs) = (k, 1) : map_ xs


main_ = do list <- getWords "test.txt"
       print $ M.toList $ reduce $ group $ map_ list

您的定义非常parMap这种定义parMap

parMap :: (a -> b) -> [a] -> Eval [b]
parMap f [] = return []
parMap f (a:as) = do
   b <- rpar (f a)
   bs <- parMap f as
   return (b:bs)

要使用它,请在生成的Eval单子上调用runEval ,例如:

main = do list <- getWords "test.txt"
          let pairs = runEval $ parMap (\x -> (x,1)) list
          ...

更新:看起来rparrseq只是将parpseq用作monad的另一种方法。 我之所以使用它,是因为它们在Haskell中的Parallel and Concurrent Programmingparconc软件包中有很好的记录。 您也许还可以在网上免费找到本书内容的较早版本。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM