据说 Haskell seq 函数强制计算其第一个参数并返回第二个参数。它用于增加表达式求值的严格性。那么下面的代码如何简单地返回 5:
seq [1..] 5
它不应该陷入尝试构建无限列表的困境吗?
最佳答案
seq
计算为弱头范式 (WHNF),这本质上意味着它计算一层数据构造函数。在这种情况下,这意味着它强制评估第一个 cons 单元(:
数据构造函数)。
我有一篇很长的文章解释了这方面的细节,地址为 https://haskell.fpcomplete.com/tutorial/all-about-strictness
关于haskell - Haskell 中 seq 如何计算无限列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54905382/