Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 理解基于parBuffer的策略运行结果_Haskell_Parallel Processing_Ghc - Fatal编程技术网

Haskell 理解基于parBuffer的策略运行结果

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

我想了解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 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