Haskell 理解基于parBuffer的策略运行结果
我想了解Haskell评估策略,并发现Haskell 理解基于parBuffer的策略运行结果,haskell,parallel-processing,ghc,Haskell,Parallel Processing,Ghc,我想了解Haskell评估策略,并发现parBuffer概念非常有趣。因此,我创建了一个计算阶乘的哑慢函数,并尝试创建它的并行版本 考虑下面的代码 module Main where import System.Environment import Control.Parallel.Strategies fac :: Int -> Int fac n | n <= 1 = 1 | otherwise = n * fac (n-1) -- sequential v
parBuffer
概念非常有趣。因此,我创建了一个计算阶乘的哑慢函数,并尝试创建它的并行版本
考虑下面的代码
module Main where
import System.Environment
import Control.Parallel.Strategies
fac :: Int -> Int
fac n
| n <= 1 = 1
| otherwise = n * fac (n-1)
-- sequential version
facsum :: Int -> Int
facsum n = sum $ map fac [1..n]
facsum_par :: Int -> Int
facsum_par n = sum lst where
lst = (map fac [1..n]) `using` parBuffer 50 rseq
main :: IO ()
main = do args <- getArgs
let (n:_) = args
print (facsum_par $ read n)
modulemain其中
导入系统。环境
进口管制.平行战略
fac::Int->Int
工厂
|n Int
facsum n=总和$map fac[1..n]
facsum_par::Int->Int
facsum_par n=总和lst,其中
lst=(map fac[1..n])`using`parBuffer 50 rseq
main::IO()
main=do args