我对弱智的正常形态和正常形态有疑问。
弱头范式的意思是,表达式只会在必要的范围内计算到数据构造函数.。
范式意味着,表达式将被完全计算。。
现在,我有以下表达:
\x -> x * 10为什么上面的表达式是正常的?
"Papu" ++ "chon"为什么上述表达既不在WHNF中,也不在NF中?
发布于 2017-06-12 10:16:01
WHNF的计算值足以达到数据构造函数或lambda函数。
如果您有一个没有用参数调用的lambda函数,那么无论如何您都无法进一步评估它。因此,lambda函数在WHNF中,实际上是NF,因为没有什么可进一步评估的。现在,如果使用参数调用lambda函数,我们可以计算结果可能是什么。但是lambda功能本身呢?没有什么要做的了。
第一个表达式是一个没有参数的lambda函数。这就是它的正常形式。
第二个表达式既不是数据构造函数,也不是lambda,因此不是任何正常形式。现在,如果您对其进行一步评估,您将获得
'P' : ("apu" ++ "chon")它(虽然语法看起来不像它)以数据构造函数(即(:))开头,因此在WHNF中,而不是NF (因为它仍然包含未计算的(++)子表达式)。
如果我们去掉infix语法,可能会更容易:
(++) "Papu" "chon"vs
(:) 'P' ( (++) "apu" "chon" )发布于 2017-06-12 10:16:14
X -> x* 10 为什么上面的表达式是正常的?
因为你不能简化它。
“帕普”++ "chon“ 为什么上述表达既不在WHNF中,也不在NF中?
首先,如果在NF中有某种表达,那就意味着它在WHNF中。这是WHNF的更严格的版本。
所以,我们可以重组你的问题。为什么上面的表达式不在WHNF?中
简单的答案是:我们可以将其简化为"Papuchon"。
如果你想知道WHNF和NF之间有什么区别,你可以阅读,例如,this。
https://stackoverflow.com/questions/44494156
复制相似问题