haskell - Haskell 中 seq 如何计算无限列表?

标签 haskell lazy-evaluation infinite seq strictness

据说 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/

相关文章:

haskell - 如何使 Applicative 的实例成为某种数据类型

Haskell:非穷举模式

haskell - 米田引理是否仅从理论角度有用?

haskell - 批量(串联)延迟消耗日志文件行

c++ - 在 C++14 中将模板变量传递给模板函数

python - 我无法在 Python 中添加一些元素

scroll - Polymer 1.0 的无限滚动(无附加)

haskell - 将两个消费者连接成一个返回多个值的消费者?

c# - 静态类 C# 中的惰性属性初始化

haskell - 任意多个不同类型列表的笛卡尔积