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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了seq如何评估Haskell中的无限列表?相关的知识,希望对你有一定的参考价值。

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

seq [1..] 5

它不应该在试图构建无限列表时陷入困境吗?

答案

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

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

以上是关于seq如何评估Haskell中的无限列表?的主要内容,如果未能解决你的问题,请参考以下文章

为啥这个 Haskell 代码可以成功地处理无限列表?

haskell中的循环列表和无限列表有啥区别?

无限列表的 Haskell 笛卡尔积

无限列表中的懒惰评估

Haskell如何知道`xs`是函数定义中的列表?

如何通过 Haskell 中的弱指针缓存构建具有重复消除的无限树