Tag: 严格性

哈斯克尔:什么是弱头范式?

弱头范式 (WHNF)是什么意思? 头正常forms (HNF)和正常forms (NF)是什么意思? 真实世界哈斯克尔说: 熟悉的seq函数将expression式评估为我们称之为头标准forms(简称HNF)的expression式。 它一旦到达最外层的构造函数(“头”)就会停下来。 这不同于正常forms(NF),其中expression被完全评估。 你也会听到Haskell程序员提到弱头标准格式(WHNF)。 对于正常的数据,弱头标准forms与头标准forms相同。 function上的区别只在于,在这里关心我们是太深奥了。 我已经阅读了一些资源和定义( 哈斯克尔Wiki和哈斯克尔邮件列表和自由字典 ),但我不明白。 有人可以举一个例子或提供一个外行的定义? 我猜测它会类似于: WHNF = thunk : thunk HNF = 0 : thunk NF = 0 : 1 : 2 : 3 : [] seq和($!)与WHNF和HNF有什么关系? 更新 我仍然困惑。 我知道一些答案说忽略HNF。 从阅读各种定义看来,WHNF和HNF的正规数据似乎没有区别。 但是,它涉及到一个函数似乎有区别。 如果没有区别,为什么seq需要foldl' ? 另外一个混淆的地方是Haskell Wiki,它声明seq简化为WHNF,对于下面的例子什么也不做。 然后他们说他们必须使用seq来强制评估。 那不是强迫它到HNF? 常用的新手堆栈溢出代码: myAverage = uncurry (/) […]