3

据说 Haskell seq函数强制评估其第一个参数并返回第二个参数。它用于增加表达式评估的严格性。那么以下如何简单地返回 5:

seq [1..] 5

它不应该被困在试图构建一个无限列表吗?

4

1 回答 1

12

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

我在https://haskell.fpcomplete.com/tutorial/all-about-strictness有一篇很长的文章解释了这方面的细节

于 2019-02-27T12:39:58.353 回答