seq如何在Haskell中评估无限列表?

时间:2019-02-27 12:21:00

标签: haskell lazy-evaluation infinite seq strictness

据说Haskell seq 函数会强制对其第一个参数求值,然后返回第二个参数。它用于增加对表达式求值的严格性。那么以下内容如何简单地返回5:

seq [1..] 5

难道不应该试图构造一个无限列表吗?

1 个答案:

答案 0 :(得分:11)

x::y::rest评估为弱头范式(WHNF),这实际上意味着它评估了一层数据构造函数。在这种情况下,这意味着它会强制评估第一个cons单元(seq数据构造函数)。

我在https://haskell.fpcomplete.com/tutorial/all-about-strictness

上发表了一篇很长的文章,解释了有关此问题的详细信息