繁体   English   中英

弱头正常形式和正常形式

[英]Weak head normal form and normal form

我对弱头正常形态和正常形态有疑问。

弱头范式意味着,表达式只会在达到数据构造函数所需的范围内求值。

范式表示表达式将被完全求值。

现在,我有以下表达:

\x -> x * 10

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

"Papu" ++ "chon"

为什么以上表达既不在WHNF中,又不在NF中?

WHNF进行评估的程度足以达到数据构造函数或lambda函数

如果您有未使用参数调用的lambda函数,则无论如何都无法对其进行评估。 因此,lambda函数存在于WHNF中,实际上在NF中,因为没有进一步评估的方法。 现在,如果您使用参数调用 lambda函数,我们可以评估结果可能是什么。 但是lambda函数本身吗? 没什么可做的了。

您的第一个表达式是不带参数的lambda函数。 因此它是正常形式的。

您的第二个表达式既不是数据构造函数也不是lambda,因此不是任何正常形式。 现在,如果您对它进行一步评估,您将获得

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

其中(虽然语法看起来并不像它)与数据构造开始(即(:) ),因此 WHNF,但不是 NF(因为它仍包含未计算(++)子表达式)。

如果我们摆脱了infix语法,也许会更容易:

(++) "Papu" "chon"

(:) 'P' ( (++) "apu" "chon" )
 \\x -> x * 10 

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

因为,您无法简化它。


 "Papu" ++ "chon" 

为什么以上表达既不在WHNF中,又不在NF中?

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

因此,我们可以调整您的问题。 为什么上面的表达式不在WHNF中?

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


如果您想了解WHNF和NF之间的区别,可以阅读this

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM