seq 如何评估 Haskell 中的无限列表?
How can seq evaluate an inifinite list in Haskell?
据说 Haskell seq 函数强制计算其第一个参数,returns 第二个参数。它用于增加表达式评估的严格性。那么下面怎么可以简单地 return 5:
seq [1..] 5
它不应该被困在试图构造一个无限列表中吗?
seq
评估为 弱头部范式 (WHNF),这实质上意味着它评估了一层数据构造函数。在这种情况下,这意味着它强制计算第一个 cons 单元(:
数据构造函数)。
我有一个很长的 post 在 https://haskell.fpcomplete.com/tutorial/all-about-strictness
解释相关细节
据说 Haskell seq 函数强制计算其第一个参数,returns 第二个参数。它用于增加表达式评估的严格性。那么下面怎么可以简单地 return 5:
seq [1..] 5
它不应该被困在试图构造一个无限列表中吗?
seq
评估为 弱头部范式 (WHNF),这实质上意味着它评估了一层数据构造函数。在这种情况下,这意味着它强制计算第一个 cons 单元(:
数据构造函数)。
我有一个很长的 post 在 https://haskell.fpcomplete.com/tutorial/all-about-strictness
解释相关细节