弱头正常形式和正常形式

我有疑问弱头正常形式和正常形式。

弱头正常形式意味着,表达式只会根据需要进行评估以达到数据构造函数。

正常形式意味着,表达式将被充分评估。

现在,我有以下表达方式:

x -> x * 10

为什么上面的表达式是正常形式?

"Papu" ++ "chon"

为什么上面的表达既不是WHNF也不是NF?


WHNF的评估足以达到数据构造函数或lambda函数。

如果你有一个lambda函数没有被参数调用,那么无论如何你都无法对它进行评估。 所以lambda函数在WHNF中,实际上是NF,因为没有什么可以进一步评估的。 现在,如果你用参数调用lambda函数,我们可以评估结果可能是什么。 但是lambda函数本身呢? 没有进一步的工作要做。

你的第一个表达式是一个没有参数的lambda函数。 这是正常的形式。

你的第二个表达式既不是数据构造函数也不是lambda表达式,因此不是任何常规形式。 现在,如果你评估一步,你会得到

'P' : ("apu" ++ "chon")

哪个(尽管语法看起来不像它)以数据构造函数(即(:) )开头,因此它在WHNF中,但不是NF(因为它仍包含未评估的(++)子表达式)。

如果我们摆脱中缀语法,也许更容易:

(++) "Papu" "chon"

VS

(:) 'P' ( (++) "apu" "chon" )

x -> x * 10

为什么上面的表达式是正常形式?

因为,你不能简化它。


"Papu" ++ "chon"

为什么上面的表达既不是WHNF也不是NF?

首先,如果NF中的某个表达 - 这意味着它在WHNF中。 NF是WHNF的更受限版本。

所以,我们可以重组你的问题。 为什么上面的表达式不在WHNF中?

简单的答案是:我们可以简化为"Papuchon"


如果你想知道WHNF和NF之间的区别,你可以阅读,比如说。

链接地址: http://www.djcxy.com/p/43007.html

上一篇: Weak head normal form and normal form

下一篇: Can pseq be defined in terms of seq?