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 有什么理由大部分时间不使用StrictPragma吗?_Haskell_Lazy Evaluation_Evaluation - Fatal编程技术网

Haskell 有什么理由大部分时间不使用StrictPragma吗?

Haskell 有什么理由大部分时间不使用StrictPragma吗?,haskell,lazy-evaluation,evaluation,Haskell,Lazy Evaluation,Evaluation,在GHC的未来版本中将提供对的支持 因此,评估可以类似于其他语言,如C、JavaScript等 严格的评估对于性能和对代码执行的理解更为有利 是的,有些函数如(&&)需要使用惰性参数,但应该经常使用,并且可以使用~ 那么,有什么理由在大多数时间不使用StrictPragma吗?这取决于手头的数据类型。在名单上,这将是相当有害的 f n = foldl' (+) 0 [1..n] 可以在恒定的空间内运行(即使没有砍伐森林)。如果列表类型是严格的,则需要线性空间 无数的成语变得不可能了 head

在GHC的未来版本中将提供对的支持

因此,评估可以类似于其他语言,如C、JavaScript等

严格的评估对于性能和对代码执行的理解更为有利

是的,有些函数如(&&)需要使用惰性参数,但应该经常使用,并且可以使用
~


那么,有什么理由在大多数时间不使用StrictPragma吗?

这取决于手头的数据类型。在名单上,这将是相当有害的

f n = foldl' (+) 0 [1..n]
可以在恒定的空间内运行(即使没有砍伐森林)。如果列表类型是严格的,则需要线性空间

无数的成语变得不可能了

head $ filter p [1..]
zip xs [1..]
fibs = 0:1:zipWith (+) fibs (tail fibs)

在高性能数字代码中,严格往往会带来更好的性能。

但是,它更多地是关于数据结构而不是严格吗?您可以用任何语言创建惰性或无限列表。@AI尝试用一种严格的语言重新定义
foldl'
,您只需使用惰性数据结构即可。。。你很快就会发现抽象泄漏,你必须改变你的
foldl'
s签名。我认为这将是非常固执己见的-在这种情况下,这意味着我们也需要一些严格的基础-IMO Haskell应该坚持它的懒惰根源-如果你有很多麻烦,你可以选择另一种语言(大多数都是严格的)-对我来说,这是Haskell的一个优点,我可以“在Haskell的未来版本”中使用默认的惰性语言-确切地说是什么版本?(属于GHC,而不是Haskell)