评估名单弱头正常形式
从1到100给出以下列表:
> let x = [1..100]
我运行sprint x
观察其未评估的价值。
> :sprint x
x = _
然后,我运行seq
来评估它为弱首标范式:
> seq x ()
()
但重新运行sprint x
显示(我认为)是相同的价值。
> :sprint x
x = _
这是为什么?
我认为这个bheklilr的评论应该被标记为答案:
x的类型是什么? 如果它是(Num a, Enum a) => [a]
那么这将无法按预期工作。 试试let x = [1..100] :: [Int
]。 实际上,当您用更普通的类型打印x时,GHCi专门将其转换为整数来进行打印。 这意味着您看到的打印值实际上并没有存储在x的thunk中。 使用具体类型可以避免这个问题。
有了David Young的补充说明,在启用单态限制时,GHCi版本早于7.8版本时不会出现此问题。
链接地址: http://www.djcxy.com/p/43019.html