3

我是haskell的新手,刚刚来到懒惰的世界编程。我读到该seq函数非常特殊,因为它强制使用严格的评估以便在某些情况下更有效。但我就是找不到seq字面上的意思。也许严格评估Q*???

4

2 回答 2

10

它应该提醒您“顺序”或“顺序”,因为它允许程序员指定其参数的评估顺序。

于 2014-01-09T08:57:36.257 回答
-6

seq在返回第二个参数之前评估它的第一个参数。通常引入它是为了通过避免不必要的惰性来提高性能。它强制评估功能。

seq :: a -> b -> b
seq _ y = y

来自prelude.hs

这个函数定义被包装了,#ifdef __HADDOCK__所以它只会被 haddock(文档工具)编译,而不是实际的编译器!“真实”序列在 GHC.Prim 中定义为

seq :: a -> b -> b; 
seq = let x = x in x. 

这只是一个虚拟的定义。基本上 seq 是由编译器特别处理的特殊语法。你写了'seq评估它的第一个参数' - 但第一个定义显然没有这样做。

通过用户2407038

更多阅读:

于 2014-01-09T12:33:43.760 回答